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