我在我的应用程序中使用libxml2,并且已经动态链接它。它工作正常,直到我开始注意到动态库已在10.9 OSX上更新,并且应用程序在10.8和10.7上运行时,由于libxml2的版本较低,我发现问题。 看到的问题是 警告:使用旧的207 我似乎得到解析这个错误但相同的代码工作正常在10.9与版本209libxml2.a OSX上的链接问题10.9
为了避免这个问题,我想对libxml的209编译的程序静态编译我的代码以使用libxml2.a。我遇到了多个问题。由于在我的机器中安装的libxml2.a版本中缺少符号,我无法编译。
我从git repo下载最新的代码并编译它。我没有安装它,但让我的程序指向新的静态库。我仍然有同样的问题。
Compile Flags
Ld /devel/Build/Products/Debug/SecurityCoreUpdater normal x86_64
cd /devel/BPSUpdater
setenv MACOSX_DEPLOYMENT_TARGET 10.7
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk -L/devel/Build/Products/Debug -F/devel/Build/Products/Debug -filelist /devel/Build/Intermediates/BPSUpdater.build/Debug/BPSUpdater.build/Objects-normal/x86_64/SecurityCoreUpdater.LinkFileList -mmacosx-version-min=10.7 /devel/libxml2.a -lCF_LSXClient
Undefined symbols for architecture x86_64:
"_libiconv", referenced from:
_xmlIconvWrapper in libxml2.a(encoding.o)
"_libiconv_close", referenced from:
_xmlFindCharEncodingHandler in libxml2.a(encoding.o)
_xmlCharEncCloseFunc in libxml2.a(encoding.o)
"_libiconv_open", referenced from:
_xmlFindCharEncodingHandler in libxml2.a(encoding.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
有没有解决这个问题?我很困惑如何解决这个问题。我讨厌为此改变解析器库。这意味着我需要重新连线很多代码。请帮忙。
问候, Varun的
这不适合我。我已经静态编译libxml2,liblzma和libiconv并将它们添加到我的项目中,但无论我链接的任何顺序如何,我总是会得到原始问题中提到的链接器错误。 –
我不知道这是如何在你的xcode,但确保你没有任何动态链接。然后在“其他链接器标记”中添加以下内容/opt/local/lib/libxml2.a /opt/local/lib/libiconv.a /opt/local/lib/liblzma.a /opt/local/lib/libcrypto.a /opt/local/lib/libz.a。有可能你不需要/opt/local/lib/libcrypto.a,只是试验下面的配置。确保您只使用端口安装的库,如下所示。默认情况下SDK的一部分库只是动态库。 – user2085689
另一个我学到的重要教训是,即使它包含在SDK中,也不要直接使用libxml。最好使用NSXML包装来确保它不会中断。 – user2085689