假设我在安装了 Xcode 4.4 的运行 Mountain Lion 的 Mac 上有一个名为 somelib.a 的第三方库。我想从中得到一个名为 somelib.dylib 的动态库。一个合适的 Linux 命令是:
g++ -fpic -shared -Wl,-whole-archive somelib.a -Wl,-no-whole-archive -o somelib.so
其中 -whole-archive 和 -no-whole-archive 被传递给链接器。
当我为 Mac 做同样的事情时:
g++ -fpic -shared -Wl,-whole-archive somelib.a -Wl,-no-whole-archive -o somelib.dylib
ld 失败并出现错误:
ld: unknown option: -whole-archive
似乎 OSX 上的 ld 与 GNU ld 不同。我必须如何修改上述命令才能获得所需的结果?
先感谢您!
最佳答案
我找到了解决我的问题的方法:
g++ -fpic -shared -Wl,-force_load somelib.a -o somelib.dylib
所需的参数是 -force_load
:-noall_load
方法不同)。 -Wl,-force_load libYetAnotherFile.a
(其中 -Wl,
部分只是必需的,因为我们不直接将参数传递给链接器)。 备注 旧答案(编辑前)正在使用
-noall_load
相反,但现在会导致链接器错误(因为 -noall_load
已被删除,以前已过时)。
关于macos - OSX : How do I convert a static library to a dynamic one?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16082470/