2

是否可以构建一个xerces-c-3.1.dylib适用于多个 OSX 版本的版本?理想情况下,10.4+,但 10.5+,甚至 10.6+ 都可以。如何?

我正在使用一个需要但不包含 dylib 的外部(命令行)程序(即不是我控制的程序),目标是不必在每台机器上重建它。

Xerces-C++ 项目没有为 OSX 预编译的二进制文件,因此我尝试通过以下方式从源代码(在 OSX 10.8.4 下)构建一个:

  1. 下载最新的源代码(我用的是xerces-c-3.1.1.tar.gz)

  2. ./configure CFLAGS="-arch x86_64 -mmacosx-version-min=10.4" CXXFLAGS="-arch x86_64 -mmacosx-version-min=10.4"

  3. 运行make。该libxerces-c-3.1.dylib文件可以在隐藏文件夹中找到src/.lib

  4. 将此文件复制到 /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

有任何想法吗?

4

1 回答 1

3

找到了!

要构建 libxerces-c-3.1.dylib 的兼容版本:

  1. 从http://xerces.apache.org/xerces-c/download.cgi下载并展开 Xerces 3.1 源代码压缩包

  2. 从生成的目录中使用以下选项运行配置脚本: ./configure --enable-netaccessor-socket CFLAGS="-arch x86_64 -mmacosx-version-min=10.5" CXXFLAGS="-arch x86_64 -mmacosx-version-min =10.5"

  3. 切换到src目录

  4. make

  5. libxerces-c-3.1.dylib可以在下面找到.../src/.libs/并且(至少对于我的应用程序)应该复制到/usr/local/lib/

libxerces-c-3.1.dylib我通过使用 Xcode 4.6.3 中的命令行工具编译 OSX 10.8.4 下的版本来测试这一点。然后我可以在 10.6、10.7 和 10.8(我拥有的所有版本)下使用结果。该解决方案需要对 Xerces 配置设置进行两项更改:

  • 指定最低 osx 兼容版本。我选择了 10.5,但只能测试回 10.6

  • 使用 curl 的替代方法访问 Internet。特别使用“套接字”网络访问器似乎有效。这是必要的,因为 10.6 中包含的 libcurl.4.dylib 版本仅支持最高 6.0.0,但在较新的系统上构建时预期的版本是 7.0.0。有关其他选项,请参阅网络访问器表:xerces-c 构建指南

于 2013-06-19T07:04:29.203 回答