gcc链接库搜索顺序; 路径加静态vs共享

Ben*_*mer 6 c++ linker gcc operator-precedence

通过gcc手册阅读,我相信以下两个陈述是正确的:

  1. 在"默认"路径之前搜索命令行上指定的库搜索路径(我假设它是LIBRARY_PATH环境变量中的东西)

  2. 共享库将优先于静态库链接(在没有标志的情况下表示不这样做)

但这两者中哪一个占主导地位?例如,如果我输入

gcc myprog.cpp -o myprog -Lmypath -lmylibrary
Run Code Online (Sandbox Code Playgroud)

在mypath中有静态库"libmylibrary.a",并且在LIBRARY_PATH中指定的某个地方有一个共享库"libmylibrary.so",这些库中的哪些将被使用?我的猜测是静态库将被使用(即(1)支配)但我看到一些有趣的编译错误让我质疑这个猜测,所以我想确保...

Mik*_*han 5

在您的示例中,静态库 libmylibrary.a将优先于链接器的默认搜索目录之一中可能存在的任何库libmylibrary.a或库进行链接。libmylibrary.so链接器在mypath任何默认位置之前进行搜索,一旦找到 or libmylibrary.alibmylibrary.so它就不再寻找满足 的条件-lmylibrary

如果同时mypath包含和,则优先选择后者。 libmylibrary.alibmylibrary.so

我不确定您所指的“gcc 手册”指的是哪个来源,但“gcc 链接器”是 GNU 链接器,并且您会发现命令行选项的含义在其手册ld中得到了很好的解释