2016-11-12 14 views
1

Мне нужно скомпилировать 32-разрядные и 64-разрядные двоичные файлы libxml2 для моего TeamSpeak 3 plugin, потому что я не смог найти 64-разрядную загрузку dll/lib. Когда я использую скомпилированную libxml2.dll в качестве зависимости в приложении командной строки, она работает нормально. Однако, когда я пытаюсь использовать его в качестве зависимости в TeamSpeak 3, программа сразу же запускается при запуске. В частности, она выходит из строя по этой линии:Как связать libxml2 с zlib1 в Windows?

https://github.com/NobleUplift/TeamSpeak3WebsitePreview/blob/master/ts3websitepreview/plugin.c#L148

Это моя партия скрипт для компиляции libxml2 на Windows:

@ECHO OFF 
CALL "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat" 
CD libxml2-2.9.4\win32 
nmake clean 
cscript configure.js compiler=msvc zlib=true prefix=D:\Repos\libxml2\release include=D:\Repos\libxml2\dll\include lib=D:\Repos\libxml2\dll\bin debug=yes 
nmake 
nmake install 
cd ../.. 

working libxml2.dll is on the left, broken libxml2 is on the right

Загруженный libxml2.dll на левых работ. Скомпилированный libxml2.dll находится справа. Я пробовал использовать флаг zlib, и я помещал свои заголовки zlib в каталог include и dll/lib в каталог lib, но я не могу заставить его ссылаться в DLL.

ответ

1

Ну, я не знаю, что случилось с вами, но вот как мы скомпилировать версию выпуска:

set TARGET_DIR=.\release_vc100 
cscript configure.js compiler=msvc cruntime=/MD debug=no iconv=no legacy=no vcmanifest=no prefix=%TARGET_DIR% || exit /B 1 
nmake /f Makefile.msvc clean || exit /B 1 
nmake /f Makefile.msvc MSVC_VERSION=vc100 || exit /B 1 
nmake /f Makefile.msvc install || exit /B 1 

Я думаю, вы не хотите iconv=no, но замечу, я явно указать /MD для динамического link release msvcrt и debug=no, а также передать MSVC_VERSION=vc100 на шаг make.

Я также отметить, вы передаете zlib=true, когда варианты, кажется, берут yes|no - и я делать думаю, «истина» не будет interpeted как 1, но как 0. (= yes!)

Глядя на ваш depwalker выход опять же, я как-то подозревает, что ваш отсутствует MSVC_VERSION переключателя может actuall быть проблемой, потому что depwalker перечисляет недостающую LIBiconv.dll и схема именования (LIB префикс для динамического объекта) является * Никс вещью, насколько я понимаю.)

Что касается вашего erro l ине - длл нагрузки не удалось - оба depwalker скриншоты показывают отсутствующие DLL файлы зависимостей:

  • Левая сторона: iconv.dll и zlib1.dll являются muissing

  • Правая сторона: LIBiconv.dll является отсутствует. (Но я думаю, что нет libiconv.dll на Windows, так что должны быть какие-то неправильные настройки компоновщика (??).


Я также передать Makefile в явном виде, но это может просто быть пережиток от предыдущей версии, где мы попробовали некоторые индивидуальные мейкфайлы

Примечание стороны:. Debug версия как:

cscript configure.js compiler=msvc cruntime=/MDd debug=yes iconv=no legacy=no vcmanifest=no prefix=%TARGET_DIR% || exit /B 1 
+0

Хотел работать над этим в эти выходные, но вместо того, чтобы Я обернулся в поврежденный репозиторий Git. Надеюсь, я смогу вернуться к этому позже на этой неделе. Посмотрел на мои доски в Wunderlist и понял, что я работаю над тем, чтобы просто строить зависимости моего плагина с апреля: \ – NobleUplift