I am trying to build libxslt on Windows, using the mingw toolchain. Unless I'm mistaken, it doesn't look like this approach is commonly used, as there seem to be a number of problems with the mingw makefile supplied. (Alternatively, it's quite possible that I'm doing something wrong, but I *have* tried the process a number of times now, on a couple of PCs, always with the same sort of issues). But even after fixing all the problems I can (patch attached) I still have issues. I'd appreciate any advice. I am using the latest mingw, with gcc version 4.7.2, on Windows 7. I have an essentially clean build environment (I've stripped everything from PATH except the Windows directories and mingw\bin). I have previously built zlib and libiconv using the msys/mingw toolchain, and I have them in my C_INCLUDE_PATH and LIBRARY_PATH variables, so that gcc will pick them up automatically. I have built libxml, by means of the documented build process cscript configure.js compiler=mingw zlib=yes prefix=foo mingw32-make install (There's one easily fixed problem here - the makefile needs a define of HAVE_STDINT_H, which I guess is because gcc 4.7.2 is a later version than the one the makefile was designed for, so now has the header where it didn't before). This gives me libxml in ...\libxml-2.9.0\win32\foo Now, I go to libxslt-1.1.28\win32. In order to get a clean build, I need to apply the attached patch. (One thing this does is include attrvt.c into the build, which suggests to me that the mingw makefile has been missed in some previous changes - I've compared with the MSVC makefile template, though, and can't see any other obvious problems). The patch adds the aforementioned attrvt.c, changes a few -llibxml2 to the correct form for mingw, -lxml2, and reorders the link libraries when building xsltproc so that the symbols are all resolved correctly (ld only does one pass over the -l options to satisfy symbol resolution). With this patch applied, and with ...\libxml-2.9.0\win32\foo\include\libxml2 added to C_INCLUDE_PATH and ...\libxml-2.9.0\win32\foo\lib added to LIBRARY_PATH (the include= and lib= parameters to configure.js don't seem to make any difference), I get the following error on building: ... gcc.exe -DWIN32 -D_WINDOWS -D_MBCS -I.. -I..\libxslt -Ifoo\include -DNDEBUG -O2 -c -o int.xslt.mingw/templates.o ..\libxslt/templates.c gcc.exe -DWIN32 -D_WINDOWS -D_MBCS -I.. -I..\libxslt -Ifoo\include -DNDEBUG -O2 -c -o int.xslt.mingw/transform.o ..\libxslt/transform.c gcc.exe -DWIN32 -D_WINDOWS -D_MBCS -I.. -I..\libxslt -Ifoo\include -DNDEBUG -O2 -c -o int.xslt.mingw/variables.o ..\libxslt/variables.c gcc.exe -DWIN32 -D_WINDOWS -D_MBCS -I.. -I..\libxslt -Ifoo\include -DNDEBUG -O2 -c -o int.xslt.mingw/xsltutils.o ..\libxslt/xsltutils.c gcc.exe -Wl,-L,bin.mingw -Wl,-L,foo\lib -shared -Wl,--dll -Wl,--out-implib,bin.mingw/libxslt.lib -Wl,--major-image-version,1 -Wl,--minor-image-version,1 -o bin.mingw/libxslt.dll int.xslt.mingw/attributes.o int.xslt.mingw/documents.o int.xslt.mingw/extensions.o int.xslt.mingw/extra.o int.xslt.mingw/functions.o int.xslt.mingw/imports.o int.xslt.mingw/keys.o int.xslt.mingw/namespaces.o int.xslt.mingw/numbers.o int.xslt.mingw/pattern.o int.xslt.mingw/preproc.o int.xslt.mingw/security.o int.xslt.mingw/templates.o int.xslt.mingw/transform.o int.xslt.mingw/variables.o int.xslt.mingw/xslt.o int.xslt.mingw/xsltlocale.o int.xslt.mingw/xsltutils.o int.xslt.mingw/attrvt.o -lwsock32 -lxml2 int.xslt.mingw/attributes.o:attributes.c:(.text+0xb): undefined reference to `_imp__xmlFree' int.xslt.mingw/attributes.o:attributes.c:(.text+0x1d8): undefined reference to `_imp__xmlFree' int.xslt.mingw/attributes.o:attributes.c:(.text+0x239): undefined reference to `_imp__xmlFree' int.xslt.mingw/attributes.o:attributes.c:(.text+0x380): undefined reference to `_imp__xmlStringTextNoenc' int.xslt.mingw/attributes.o:attributes.c:(.text+0x492): undefined reference to `_imp__xmlFree' int.xslt.mingw/attributes.o:attributes.c:(.text+0x557): undefined reference to `_imp__xmlFree' int.xslt.mingw/attributes.o:attributes.c:(.text+0x5f4): undefined reference to `_imp__xmlFree' int.xslt.mingw/attributes.o:attributes.c:(.text+0x6bc): undefined reference to `_imp__xmlStringTextNoenc' int.xslt.mingw/attributes.o:attributes.c:(.text+0x6e4): undefined reference to `_imp__xmlMalloc' int.xslt.mingw/attributes.o:attributes.c:(.text+0xa99): undefined reference to `_imp__xmlFree' int.xslt.mingw/attributes.o:attributes.c:(.text+0xb41): undefined reference to `_imp__xmlFree' int.xslt.mingw/attributes.o:attributes.c:(.text+0xd02): undefined reference to `_imp__xmlFree' int.xslt.mingw/attributes.o:attributes.c:(.text+0xd18): undefined reference to `_imp__xmlFree' d:/mingw/bin/../lib/gcc/mingw32/4.7.2/../../../../mingw32/bin/ld.exe: int.xslt.mingw/attributes.o: bad reloc address 0x20 in section `.eh_frame' collect2.exe: error: ld returned 1 exit status Makefile:238: recipe for target 'bin.mingw\libxslt.dll' failed mingw32-make: *** [bin.mingw\libxslt.dll] Error 1 This looks to me like some sort of mismatch in declspec settings. And yet, there are no settings that I can see in configure.js (either libxml's or libxslt's) that might affect this. A couple of other points: * I am doing my own build rather than using the binaries available from Igor Zlatovic, as those link to iconv.dll, and the mingw/msys toolchain I use for my other builds uses libiconv-2.dll. I have had far too many programs crash from mismatched libiconv builds in the past to want to deal with it again, hence my preference for building my own copy with a matching libiconv. * The error above didn't happen when I ran the build on my other PC (which I don't have at hand at the moment to check). There may be something subtly different in the environments of the two PCs, but (a) I don't know what it might be, I've gone to great lengths to try to get a minimal build environment, and (b) I'd really like to have a reproducible build process, so I'd like to understand the cause in any case. Can anyone offer any suggestions as to what might be going on? I've been working on this for 2 or 3 days now, and I think I've gone as far as I can on my own. Any suggestions would be very gratefully accepted. Thanks, Paul.
Attachment:
Makefile.mingw.patch
Description: Binary data