1

I need to compile libxml2 32-bit and 64-bit binaries for my TeamSpeak 3 plugin because I could not find a dll/lib 64-bit download. When I use my compiled libxml2.dll as a dependency in a command prompt application, it works just fine. However, when I try to use it as a dependency in TeamSpeak 3, the program immediately crashes on launch. Specifically it crashes on this line:

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

This is my batch script for compiling libxml2 on 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

The downloaded libxml2.dll on the left works. Compiled libxml2.dll is on the right. I've tried using the zlib flag, and I put my zlib headers in the include directory and the dll/lib in the lib directory, but I can't get it to link in the DLL.

NobleUplift
  • 5,631
  • 8
  • 45
  • 87

1 Answers1

1

Well, I dunno whats wrong with yours, but here's how we compile the release version:

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

I guess you don't want iconv=no, but I'll note I explicitly specify /MD for the dynamic link release msvcrt and debug=no as well as passing MSVC_VERSION=vc100 to the make step.

I also note you pass zlib=truewhen the options seem to take yes|no - and I do think 'true' will not interpeted as 1, but as 0. (!= yes)

Looking at your depwalker output again, I somehow suspect your missing MSVC_VERSION switch may actuall be a problem, because depwalker lists a missing LIBiconv.dll and that naming scheme (LIB prefix for dynamic object) is a *nix thing as far as I understand this.)

As for your erro line -- dll load failed -- both depwalker screenshots show missing dependency DLL files:

  • Left side: iconv.dll and zlib1.dll are muissing

  • Right side: LIBiconv.dll is missing. (But I think there is no libiconv.dll on Windows, so there must be some wrong linker settings (??).


I also pass the makefile explicitly, but that may just be a leftover from a prior version where we tried some customized makefiles.

Side note: Debug version as:

cscript configure.js compiler=msvc cruntime=/MDd debug=yes iconv=no legacy=no vcmanifest=no prefix=%TARGET_DIR% || exit /B 1
Martin Ba
  • 37,187
  • 33
  • 183
  • 337
  • Wanted to work on this this weekend but instead I got wrapped up in a corrupted Git repository. Hopefully I can get back to this later in the week. Looked at my to-dos in Wunderlist and realized I've been working on just building my plugin's dependencies since April :\ – NobleUplift Nov 27 '16 at 23:04