直接告诉gcc静态链接一个库
使用-Wl,-Bstatic
为了告诉gcc
我想静态链接哪些库,感觉很奇怪。 毕竟我直接告诉gcc
有关链接库的所有其他信息( -Ldir
, -llibname
)。
是否有可能直接告诉gcc驱动程序哪些库应该静态链接?
澄清:我知道如果某个库仅存在于静态版本中,它将在没有-Wl,-Bstatic
情况下使用它,但我希望暗示gcc
更喜欢静态库。 我也知道直接指定库文件会与它链接,但我更愿意保持包含静态和动态库的语义相同。
当然,可以使用-l:
而不是-l
。 例如-l:libXYZ.a
与libXYZ.a
链接的libXYZ.a
。 注意lib
写出来,而不是-lXYZ
,它会自动扩展为libXYZ
。
您可以在链接命令中添加.a文件:
gcc yourfiles /path/to/library/libLIBRARY.a
但是这不是与gcc驱动程序交谈,而是使用ld
链接程序作为选项,如-Wl,anything
都可以。
当你告诉gcc或ld“-Ldir -lLIBRARY”时,链接器将检查库的静态和动态版本(你可以看到一个具有-Wl,--verbose
的进程)。 要更改检查的库类型的顺序,可以使用-Wl,-Bstatic
和-Wl,-Bdynamic
。 这里是gnu LD的手册页面:http://linux.die.net/man/1/ld
要动态地将程序与lib1,lib3和lib2静态链接,请使用以下gcc调用:
gcc program.o -llib1 -Wl,-Bstatic -llib2 -Wl,-Bdynamic -llib3
假定ld的默认设置是使用动态库(它在Linux上)。
链接地址: http://www.djcxy.com/p/85765.html