Я использую libxml2 в своем приложении и динамически связываю его. Он отлично работает, пока я не начал замечать, что динамическая библиотека была обновлена на 10.9 OSX, и когда приложение работает на 10.8 и 10.7, я вижу проблемы из-за более низкой версии libxml2. Проблема видели это Внимание: программа составлена на Libxml 209 с использованием старше 207 я, кажется, чтобы получить разбора ошибок с этим, однако тот же код прекрасно работает в 10.9 с версии 209libxml2.a проблемы с привязкой к OSX 10.9
Чтобы избежать этой проблемы, я хотел статически компилируйте мой код, чтобы использовать 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)
Есть ли исправление для этого? Я довольно смущен, как решить эту проблему. Мне бы очень хотелось изменить библиотеку парсеров именно для этого. Это означает, что мне нужно переписать много кода. Пожалуйста помоги.
С уважением, Варуна
Это не работает для меня. Я собрал 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
Еще один важный урок, который я узнал, НИКОГДА не использует libxml напрямую, даже если он включен в SDK. Лучше использовать обертки NSXML, чтобы гарантировать, что он не сломается. – user2085689