0

我使用gcc的编译器比任何其他编译器都多,所以我将使用这个编译器套件来塑造我的示例,但是我在我尝试过的几乎所有套件中都遇到了这个问题,比如gcc,和.mingwclangmsvc

gcc提供此标志:

  • -l你写名字foo,gcc会找到一个对应的库,名为libfoo
  • -L您附加库所在的路径,并且 gcc 尝试将所需的库与它在该路径中找到的库匹配
  • -rpath基本上是同一个库的不同路径池,因此可执行文件足够“智能”,可以在需要时寻找替代方案。

这个问题对我来说很大,没有一个能解决我的问题,而且每个标志都面临同样的问题:歧义。

如果我只想链接一个我知道没有办法在最好的情况下不包含一些歧义的库,我想要的是:

  • 仅链接 1 个特定库,并且仅链接我使用精确名称和路径指定的 1
  • 避免像给定名称那样的自动完成机制,-l因为我的库没有foo.so命名libfoo.so
  • 链接库的相对路径
  • 只考虑明确给出的一组库,不应该涉及任何其他自动化,没有库池,没有搜索路径,没有别的,我更喜欢错误列表而不是链接到随机库的可执行文件

我经常在不同的版本中处理不同的库,出于历史和兼容性的原因,它们经常使用相同的名称,使用 gcc 编译和链接是一场噩梦,因为我从来没有得到我想要链接到我的可执行文件的库。

谢谢。

4

1 回答 1

1

最简单的方法是简单地指定库。

gcc -o test test.o /path/my_library.so /path/to_other_library.a

这种方法的明显缺点当然是如果您移动该库,那么您的应用程序将不再工作,但由于您声明您在固定位置拥有库,因此它应该适用于您的情况。

于 2012-11-28T06:10:36.930 回答