通读 gcc 手册,我相信以下两种说法是正确的:
在命令行上指定的库搜索路径在“默认”路径之前搜索(我认为这意味着 LIBRARY_PATH 环境变量中的内容)
共享库将优先于静态库进行链接(在没有标志说明要这样做的情况下)
但这两者谁占主导地位呢?例如,如果我输入
gcc myprog.cpp -o myprog -Lmypath -lmylibrary
在 mypath 中有静态库“libmylibrary.a”,并且在 LIBRARY_PATH 中指定的某个位置有一个共享库“libmylibrary.so”,将使用这些库中的哪个?我的猜测是静态库将被使用(即(1)占主导地位),但我看到一些有趣的编译错误,这让我质疑这个猜测,所以我想确保......
在您的示例中,静态库libmylibrary.a
将被链接到
优先于任何libmylibrary.a
or libmylibrary.so
那可能
存在于链接器的默认搜索目录之一中。链接器
搜索于mypath
在任何默认位置之前,并且一旦
它找到一个libmylibrary.a
or libmylibrary.so
,看起来没有进一步
为了满足-lmylibrary
.
If mypath
包含both libmylibrary.a
and libmylibrary.so
, 这
后者将是首选。
我不确定你所说的“gcc手册”指的是哪个来源,但是
“gcc 链接器”是 GNU 链接器,ld
,你会发现
命令行选项的含义在其中得到了很好的解释manual https://sourceware.org/binutils/docs/ld/Invocation.html#Invocation
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)