仔细阅读gcc手册,我相信以下两个说法是正确的:

  • 在“默认”路径(我认为这意味着LIBRARY_PATH环境变量中的内容)之前,在命令行上搜索库指定的搜索路径。
  • 共享库将优先链接到静态库(在没有标记的情况下表示否则)

  • 但是,这两个占主导地位?例如,如果我输入
    gcc myprog.cpp -o myprog -Lmypath -lmylibrary
    

    在mypath中有一个静态库“libmylibrary.a”,在LIBRARY_PATH中指定的某个地方有一个共享库“libmylibrary.so”,将使用其中哪一个库?我的猜测是静态库将被使用(即(1)占主导地位),但是我看到一些有趣的编译错误使我对此猜测表示怀疑,所以我想确保...

    最佳答案

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

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

    我不确定“gcc手册”指的是什么来源,但是
    “gcc链接器”是GNU链接器ld,您将找到
    命令行选项的含义在manual中得到了很好的解释

    10-06 09:57