我在我的應用程序中使用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