直接告诉gcc静态链接库

时间:2011-07-05 06:03:19

标签: gcc linker static-libraries dynamic-linking

使用-Wl,-Bstatic来告诉gcc我想要静态链接哪些库,我觉得很奇怪。毕竟我直接告诉gcc关于与图书馆链接的所有其他信息(-Ldir-llibname)。

是否可以直接告诉gcc驱动程序哪些库应该静态链接?

澄清:我知道如果某个库仅存在于静态版本中,它将在没有-Wl,-Bstatic的情况下使用它,但我想暗示gcc更喜欢静态图书馆。我也知道直接指定库文件会链接它,但我更喜欢保持包含静态和动态库的语义相同。

2 个答案:

答案 0 :(得分:141)

当然可以使用-l:代替-l。例如-l:libXYZ.alibXYZ.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上)。