手动链接和可执行,无需替代

时间:2012-11-25 11:28:46

标签: gcc linker ld

我使用gcc比任何其他编译器更多,所以我将使用这个编译器套件来塑造我的示例,但我几乎所有我试过的套件都经历过这个问题,例如gcc,{ {1}},mingwclang

msvc提供此标志:

  • gcc你写了-l这个名字,gcc会找到一个名为foo
  • 的相应图书馆
  • libfoo你附加了libs所在的路径,gcc尝试将所需的库与它在该路径中找到的库相匹配
  • -L基本上是同一个lib的不同路径池,因此可执行文件“足够智能”,足以在需要时查找备选方案。

这个问题对我来说很重要,没有人解决我的问题,而且每一个标志都遇到同样的问题:含糊不清。

如果我只是想链接一个我知道没有办法做到这一点的图书馆而没有在最好的情况下包含一些歧义,我想要的是:

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

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

感谢。

1 个答案:

答案 0 :(得分:1)

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

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

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