是否可以构建可与多个 OSX 版本一起使用的 xerces-c-3.1.dylib
版本?理想情况下,10.4+,但 10.5+,甚至 10.6+ 也可以。怎么办?
我正在使用一个外部(命令行)程序(即不是一个我 控制),需要但不包括 dylib,目标是 不必在每台机器上重建它。
Xerces-C++ project没有预编译的二进制文件 OSX 因此我尝试通过以下方式从源代码(在 OSX 10.8.4 下)构建一个:
下载最新的source code (我使用了xerces-c-3.1.1.tar.gz)
运行
./configure CFLAGS="-arch x86_64 -mmacosx-version-min=10.4"CXXFLAGS="-arch x86_64 -mmacosx-version-min=10.4"
运行
make
。libxerces-c-3.1.dylib
文件可以在隐藏文件夹src/.lib
中找到。将此文件复制到/usr/local/lib
这个 dylab 在 10.8.4 和 10.7.5 机器上运行良好。问题是不起作用 在 10.6.8(可能是更旧的)机器上。在 10.6.8 上,我收到以下错误:
dyld: Library not loaded: /usr/lib/libcurl.4.dylib
Referenced from: /usr/local/lib/libxerces-c-3.1.dylib
Reason: Incompatible library version: libxerces-c-3.1.dylib requires
version 7.0.0 or later, but libcurl.4.dylib provides version 6.0.0
有什么想法吗?
最佳答案
找到了!
构建 libxerces-c-3.1.dylib 的兼容版本:
从 http://xerces.apache.org/xerces-c/download.cgi 下载并展开 Xerces 3.1 源代码包
从结果目录中使用以下选项运行配置脚本: ./configure --enable-netaccessor-socket CFLAGS="-arch x86_64 -mmacosx-version-min=10.5" CXXFLAGS="-arch x86_64 -mmacosx-version-min=10.5"
切换到
src
目录运行
make
libxerces-c-3.1.dylib
可以在.../src/.libs/
下找到,并且(至少对于我的应用程序)应该是复制到/usr/local/lib/
我通过使用 Xcode 4.6.3 中的命令行工具在 OSX 10.8.4 下编译 libxerces-c-3.1.dylib
版本进行了测试。然后我就可以在 10.6、10.7 和 10.8(我可用的所有版本)下使用结果。该解决方案需要对 Xerces 配置设置进行两处更改:
指定最低 osx 兼容性版本。我选择了10.5,但只能测试回10.6
使用curl 的替代方法来访问互联网。特别使用“套接字”netaccessor 似乎有效。这是必要的,因为 10.6 中包含的 libcurl.4.dylib 版本仅支持最高 6.0.0,但在较新的系统上构建时预期的版本是 7.0.0。对于其他选项,请参阅网络访问器表:the xerces-c build guide
关于macos - Xerces-C dylib 的 Mac OSX 兼容版本 (10.5-10.8),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17102409/