macos - OSX : How do I convert a static library to a dynamic one?

标签 macos dynamic linker static-libraries

假设我在安装了 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/

    相关文章:

    javascript - Ffmpeg 在 Electron 沙盒应用程序中中止

    Eclipse 在构建前自动保存?

    c++ - 编译器找不到 .lib 文件

    python - Mac OS X(雪豹)上的 NI VISA + pyVisa

    javascript - 无法更改表中动态附加行的样式?

    c - C 中的链表 – 方法

    PostgreSQL 交叉表查询从辅助查询中提取列

    c++ - "Undefined struct"创建对象时出错

    c++ - 在另一个库中链接一个库,仍然必须在最终项目中链接它

    macos - "nice"命令在 macOS 上不起作用