我在我的应用程序中使用libxml2并动态链接它。它工作正常,直到我开始注意到动态库在10.9 OSX上更新,当应用程序在10.8和10.7上运行时,由于较低版本的libxml2,我看到了问题。 看到的问题是 警告:使用较旧的207 针对libxml 209编译的程序 我似乎得到了解析错误,但相同的代码在10.9版本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
答案 0 :(得分:0)
我找到了答案,如果在构建设置中的其他链接器标志中静态链接,则需要添加libiconv.a,或者在xcode5的“构建阶段”中的“链接二进制文件库”中添加libiconv.dylib。同样,我也注意到需要将liblzma包含为动态库或静态来解决问题。
添加为动态库(dylib)时的大多数导入考虑因素是libs的存在顺序。显然,libiconv和liblzma必须低于libxml2.a才能正确编译。我不确定为什么需要这个,但我能够使用相同的程序解决问题。然而我静态编译了所有三个库,因为我不希望在OS之间运行这个动态的lib版本更改,因为我的安装程序没有检查已安装的库版本。