通过gcc手册阅读,我认为以下两个陈述是正确的:
在"默认"之前搜索命令行中指定的库搜索路径。路径(我假设它意味着LIBRARY_PATH环境变量中的东西)
共享库将优先链接到静态库(如果没有标记,则表示不这样做)
但这两者中哪一个占主导地位?例如,如果我输入
gcc myprog.cpp -o myprog -Lmypath -lmylibrary
在mypath中有静态库" libmylibrary.a",并且在LIBRARY_PATH中指定的某个地方有一个共享库" libmylibrary.so",这些库中的哪一个将习惯了?我的猜测是静态库将被使用(即(1)支配)但我看到一些有趣的编译错误让我质疑这个猜测,所以我想确保......
答案 0 :(得分:4)
在您的示例中,将链接静态库libmylibrary.a
对可能的任何libmylibrary.a
或libmylibrary.so
的偏好
存在于链接器的一个默认搜索目录中。链接器
在任何默认位置之前搜索mypath
,并尽快搜索
它找到libmylibrary.a
或libmylibrary.so
,它看起来没有进一步
满足-lmylibrary
。
如果mypath
包含 libmylibrary.a
和libmylibrary.so
,
后者将是首选。
我不确定你用“gcc手册”指的是什么来源,但是
“gcc链接器”是GNU链接器ld
,你会发现它
命令行选项的含义在其manual