Mac OSX兼容版Xerces-C dylib(10.5-10.8)

时间:2013-06-14 06:30:34

标签: macos xerces-c

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

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

Xerces-C++ project没有预先编译的二进制文件 OSX所以我试图通过以下方式在源代码(在OSX 10.8.4下)构建一个:

  1. 下载最新的source code(我用的是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

  5. 这个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
    

    有什么想法吗?

1 个答案:

答案 0 :(得分:3)

发现它!

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

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

  2. 从生成的目录中使用以下选项运行configure脚本: ./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/

  6. 我通过使用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