gcc 链接器库搜索顺序;路径加上静态与共享
gcc linker library search order; paths plus static vs shared
通读gcc手册,我相信以下两个说法是正确的:
在命令行中指定的库搜索路径在 "default" 路径之前搜索(我假设这意味着 LIBRARY_PATH 环境变量中的内容)
共享库将优先于静态库链接(在没有标志说明否则)
但这两者哪个占主导地位?例如,如果我输入
gcc myprog.cpp -o myprog -Lmypath -lmylibrary
并且在mypath中有静态库"libmylibrary.a",在LIBRARY_PATH中指定的某个地方有共享库"libmylibrary.so",这些库中的哪些将被使用?我的猜测是静态库将被使用(即 (1) 占主导地位)但我看到一些有趣的编译错误让我质疑这个猜测,所以我想确保...
在您的示例中,静态库 libmylibrary.a
将被链接到
优先于任何 libmylibrary.a
或 libmylibrary.so
存在于链接器的默认搜索目录之一中。链接器
在任何默认位置之前的 mypath
中搜索,并尽快
它找到 libmylibrary.a
或 libmylibrary.so
,它不再寻找
满足-lmylibrary
.
如果 mypath
包含 libmylibrary.a
和 libmylibrary.so
,则
后者将是首选。
我不确定 "the gcc manual" 你指的是哪个来源,但是
"the gcc linker" 是 GNU 链接器,ld
,你会发现
命令行选项的含义在其 manual
中得到了很好的解释
通读gcc手册,我相信以下两个说法是正确的:
在命令行中指定的库搜索路径在 "default" 路径之前搜索(我假设这意味着 LIBRARY_PATH 环境变量中的内容)
共享库将优先于静态库链接(在没有标志说明否则)
但这两者哪个占主导地位?例如,如果我输入
gcc myprog.cpp -o myprog -Lmypath -lmylibrary
并且在mypath中有静态库"libmylibrary.a",在LIBRARY_PATH中指定的某个地方有共享库"libmylibrary.so",这些库中的哪些将被使用?我的猜测是静态库将被使用(即 (1) 占主导地位)但我看到一些有趣的编译错误让我质疑这个猜测,所以我想确保...
在您的示例中,静态库 libmylibrary.a
将被链接到
优先于任何 libmylibrary.a
或 libmylibrary.so
存在于链接器的默认搜索目录之一中。链接器
在任何默认位置之前的 mypath
中搜索,并尽快
它找到 libmylibrary.a
或 libmylibrary.so
,它不再寻找
满足-lmylibrary
.
如果 mypath
包含 libmylibrary.a
和 libmylibrary.so
,则
后者将是首选。
我不确定 "the gcc manual" 你指的是哪个来源,但是
"the gcc linker" 是 GNU 链接器,ld
,你会发现
命令行选项的含义在其 manual