我的问题是this question
的扩展我想链接2个库 - foo
和bar
更喜欢静态用于foo而动态用于bar。如果我使用
g++ -static -lfoo -lbar
它试图找到foo和bar的静态存档。当我将命令更改为
时g++ -Wl,-Bstatic -lfoo -Wl,-Bdynamic -lbar -Wl,--as-needed
根据上述问题,这是我得到的错误:
ld: unknown option: -Bstatic
更新: 我正在使用OSX,如果这有任何区别
答案 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,而其他必需的库将动态链接。