g ++链接器无法识别-Bstatic

时间:2012-01-18 13:27:23

标签: linker g++

我的问题是this question

的扩展

我想链接2个库 - foobar更喜欢静态用于foo而动态用于bar。如果我使用

g++ -static -lfoo -lbar

它试图找到foo和bar的静态存档。当我将命令更改为

g++ -Wl,-Bstatic -lfoo -Wl,-Bdynamic -lbar -Wl,--as-needed

根据上述问题,这是我得到的错误:

ld: unknown option: -Bstatic

更新: 我正在使用OSX,如果这有任何区别

2 个答案:

答案 0 :(得分:6)

我们在这里处理GNU链接器吗?你能告诉我们“ld -v”的输出吗?

编辑:看起来不像GNU的ld,因此无法识别-Bstatic选项。似乎Apple的ld不支持很好地混合静态和动态库;看到这个:Mixed static and dynamic link on Mac OS

答案 1 :(得分:1)

是的,不幸的是,使用OS X正在发挥作用。 -static要求编译器为您提供完全静态链接的可执行文件(OS X不支持),并且正如Adiel指出的那样,-Wl,-Bstatic用于混合静态和动态链接并不受Apple&支持#39; s clang linker。

要在Mac上解决此问题,请尝试:

g++ myapp.cpp libfoo.a libbar.a

作为您的编译行(其中库名称在命令行中跟随您的源代码)。这将为您提供与foo和bar库静态链接的myapp,而其他必需的库将动态链接。