我的问题是这个问题
的延伸我想链接 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,如果这有什么区别的话
我们在这里处理 GNU 链接器吗?你能给我们看看“ld -v”的输出吗?
编辑: 这看起来不像 GNU 的 ld,所以这就是 -Bstatic 选项不被识别的原因。而且Apple的ld似乎不太支持混合静态和动态库;请参阅:Mac OS 上的混合静态和动态链接。
是的,不幸的是,使用 OS X 会带来不同。
-static
要求编译器为您提供完全静态链接的可执行文件(OS X 上不支持),正如 Adiel 指出的那样,Apple 的 clang 链接器不支持用于混合静态和动态链接的 -Wl,-Bstatic。
要在 Mac 上解决此问题,请尝试:
g++ myapp.cpp libfoo.a libbar.a
作为您的编译行(其中库名称遵循命令行上的源代码)。这将使您的 myapp 与 foo 和 bar 库静态链接,而其他所需的库将动态链接。