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

时间:2015-02-19 13:44:11

标签: c++ gcc linker operator-precedence

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

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

  2. 共享库将优先链接到静态库(如果没有标记,则表示不这样做)

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

    gcc myprog.cpp -o myprog -Lmypath -lmylibrary
    

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

1 个答案:

答案 0 :(得分:4)

在您的示例中,将链接静态库libmylibrary.a 对可能的任何libmylibrary.alibmylibrary.so的偏好 存在于链接器的一个默认搜索目录中。链接器 在任何默认位置之前搜索mypath,并尽快搜索 它找到libmylibrary.alibmylibrary.so,它看起来没有进一步 满足-lmylibrary

如果mypath包含 libmylibrary.alibmylibrary.so, 后者将是首选。

我不确定你用“gcc手册”指的是什么来源,但是 “gcc链接器”是GNU链接器ld,你会发现它 命令行选项的含义在其manual

中得到了很好的解释