使用-Wl,-Bstatic
来告诉gcc
我想要静态链接哪些库,我觉得很奇怪。毕竟我直接告诉gcc
关于与图书馆链接的所有其他信息(-Ldir
,-llibname
)。
是否可以直接告诉gcc驱动程序哪些库应该静态链接?
澄清:我知道如果某个库仅存在于静态版本中,它将在没有-Wl,-Bstatic
的情况下使用它,但我想暗示gcc
更喜欢静态图书馆。我也知道直接指定库文件会链接它,但我更喜欢保持包含静态和动态库的语义相同。
答案 0 :(得分:141)
当然可以使用-l:
代替-l
。例如-l:libXYZ.a
与libXYZ.a
相关联。请注意lib
已写出,而-lXYZ
会自动扩展为libXYZ
。
答案 1 :(得分:114)
您可以在链接命令中添加.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上)。