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

Linker g++;链接器无法识别-Bstatic,linker,g++,Linker,G++,我的问题是这个问题的延伸 我想链接两个库-foo和bar首选foo的静态库和bar的动态库。如果我使用 g++ -static -lfoo -lbar 它试图找到foo和bar的静态存档。当我将命令更改为 g++ -Wl,-Bstatic -lfoo -Wl,-Bdynamic -lbar -Wl,--as-needed 根据上述SO问题,这是我得到的错误: ld: unknown option: -Bstatic 更新: 我正在使用OSX,如果这有什么不同的话我们在这里处理GNU链接器吗

我的问题是这个问题的延伸

我想链接两个库-
foo
bar
首选foo的静态库和bar的动态库。如果我使用

g++ -static -lfoo -lbar
它试图找到foo和bar的静态存档。当我将命令更改为

g++ -Wl,-Bstatic -lfoo -Wl,-Bdynamic -lbar -Wl,--as-needed
根据上述SO问题,这是我得到的错误:

ld: unknown option: -Bstatic
更新:
我正在使用OSX,如果这有什么不同的话

我们在这里处理GNU链接器吗?你能给我们看一下“ld-v”的输出吗


编辑:这看起来不像GNU的ld,因此-Bstatic选项无法识别。苹果的ld似乎不太支持静态库和动态库的混合;请看以下内容:。

是的,不幸的是,使用OSX正在发挥作用<代码>-static要求编译器为您提供一个完全静态链接的可执行文件(OS X不支持),正如Adiel指出的,-Wl,-Bstatic用于混合静态链接和动态链接,Apple的clang链接器不支持

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

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


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

$ld-v@(#)程序:ld项目:ld64-127.2 llvm版本3.0svn,来自Apple Clang 3.0(build 211.10.1)+1感谢您的解释!那么,有没有办法选择一个非Apple的链接器呢?看起来不可能使用GNU链接器(),这基本上表明您必须移动文件来混合共享库和静态库:S@SaptarshiBiswas使用带有符号链接的“代理”
lib
目录可能更灵活。不过这仍然是一个用户端的黑客攻击。我在链接行上得到了这个
ld:warning:unexpected dylib(/path/to/libfoo.dylib)。在同一个位置也有一个。我手动删除了动态库,&now
ld
被强制拾取。但这不应该是解决方案,因为消除歧义的应该是
-Wl,-static
,而不是我