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

问题描述 投票:0回答:2

我的问题是这个问题

的延伸

我想链接 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,如果这有什么区别的话

macos linker g++
2个回答
6
投票

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

编辑: 这看起来不像 GNU 的 ld,所以这就是 -Bstatic 选项不被识别的原因。而且Apple的ld似乎不太支持混合静态和动态库;请参阅:Mac OS 上的混合静态和动态链接


2
投票

是的,不幸的是,使用 OS X 会带来不同。

-static
要求编译器为您提供完全静态链接的可执行文件(OS X 上不支持),正如 Adiel 指出的那样,Apple 的 clang 链接器不支持用于混合静态和动态链接的 -Wl,-Bstatic。

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

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

作为您的编译行(其中库名称遵循命令行上的源代码)。这将使您的 myapp 与 foo 和 bar 库静态链接,而其他所需的库将动态链接。

© www.soinside.com 2019 - 2024. All rights reserved.