直接告诉gcc静态链接一个库

我感到奇怪的是,使用-Wl,-Bstatic来告诉gcc我想静态链接哪些库。 毕竟我直接告诉gcc所有关于链接库的其他信息( -Ldir-llibname )。

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

澄清:我知道,如果某个库只存在于静态版本中,它将使用它,而不使用-Wl,-Bstatic ,但是我想暗示gcc偏好静态库。 我也知道,直接指定库文件将链接它,但我更喜欢保持包括静态和dynamic库相同的语义。

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