macos - 使用 clang 从 cpp 文件和静态库创建动态库

标签 macos shared-libraries clang static-libraries

我有以下问题:

我有名为 libAlgatorc.a 的静态库和三个名为 SortingAbsAlgorithm.cppSortingTestCase.cppSortingTestSetIterator 的 cpp 文件。 cpp.

现在,我想创建包含来自 cpp 文件和静态库的符号的动态库。我可以在 Linux(Ubuntu 12.04 x64,g++ 版本 4.8.1)中这样做:

g++ -fPIC SortingAbsAlgorithm.cpp SortingTestCase.cpp SortingTestSetIterator.cpp -shared -o libProject.so -Wl,--whole-archive -lAlgatorc -Wl,--no-whole-archive

但我不能在 OS X 上执行此操作。clang 没有 -Wl,--whole-archive 选项。

我有以下 clang 版本:

$ clang --version
Apple LLVM version 7.0.0 (clang-700.0.53.3)
Target: x86_64-apple-darwin15.0.0
Thread model: posix

有什么建议吗?

最佳答案

来自 Apple 的 Dynamic Library Programming Topics ,可能是这样的:

clang -dynamiclib \
    SortingAbsAlgorithm.cpp SortingTestCase.cpp SortingTestSetIterator.cpp \
    -stdlib=libc++ -current_version 1.0 -compatibility_version 1.0 \
    -fvisibility=hidden -L. -lAlgatorc -o libProject.dylib

鉴于我已经指定了 -stdlib=libc++,您可能还需要 -mmacosx-version-min=10.7

所以实际上只有 -dynamiclib 很重要。

关于macos - 使用 clang 从 cpp 文件和静态库创建动态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31988594/

相关文章:

windows - 在Windows下编译.so

c++ - 我怎样才能让 GCC/Clang 警告使用未初始化的成员?

适用于 OS X 的带有 openmp 的 Python C 扩展

objective-c - Snow Leopard 上的窗口关闭按钮劫持

java - 添加联系人到 mac 联系人?

java - Java中加载的共享库可以调用Java方法吗?

java.lang.UnsatisfiedLinkError : no <LIBRARY> in java. 库.path

macos - Mac 上的网络发现

objective-c - 检测屏幕/应用程序窗口的哪一部分正在使用 OpenGL?

c++ - 用 clang++ 生成的可执行文件变得疯狂