【问题标题】:is it a common practice to have the static and dynamic versions of a library with the same name?具有相同名称的库的静态和动态版本是一种常见的做法吗?
【发布时间】:2014-02-05 21:26:04
【问题描述】:

我下载了一个库(准确地说是 NAG c 库)并且库的静态和动态版本具有相同的名称(libnagc_nag)。一开始我遇到了麻烦,因为我试图链接到 OS X 中的静态版本,默认情况下它使用动态库,所以我更改了文件的名称以区分它们(libnagc_nag_s.a 和 libnagc_nag_d.dylib OS X 和 linux 中的 libnagc_nag_d.so)。 我的问题是:给它们起相同的名字是一种常见的做法吗?就算是这样,这样改名字有什么问题或者缺点吗?

【问题讨论】:

  • 是的,这是一种常见的做法。您应该选择带有链接器标志的正确类型的库 (-Bstatic/-Bdynamic)。
  • 如果你想使用一些库的静态版本和其他库的动态版本会发生什么?

标签: c++ c linker static-libraries dynamic-library


【解决方案1】:

您还可以向链接器提供完整的库文件名(作为目标文件)...

【讨论】:

  • 谢谢,这行得通。不过,我问的原因主要是为了了解链接器的行为,并了解一些常见做法。
【解决方案2】:

是的,这是惯例

 libNAME.a

 libNAME.so.VERS 

.a 是静态存档。为什么你想要在你的程序中添加一个静态库呢?如果你这样做,你会遇到维护困难。

-lnagc_nag_d 添加到 Makefile 中的 LDFLAGS 应该足以获取链接的动态库。

【讨论】:

  • 一旦我将名称修改为 libnagc_nag_s.a 和 libnagc_nag_d.so.V 很容易将它们与标志一起添加,但问题是当它们具有相同的名称时,所以 -lnagc_nag_d 不会在这种情况下提供帮助。
  • 为什么要在应用程序中同时添加静态和动态表单?你需要一个或另一个,我强烈推荐动态表单。
  • 不,我只想加一个,其实是静态版(是个小科学应用,不会多次使用)。问题是,当我这样做时,我意识到静态和动态都使用相同的命令,因为它们具有相同的名称。这引起了我的好奇心,现在我想弄清楚程序员通常如何选择他们想要使用的版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-12
  • 1970-01-01
  • 2021-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多