Nginx won't build with xslt into static linked binary

Maxim Dounin mdounin at mdounin.ru
Sun Feb 12 22:42:52 UTC 2023


Hello!

On Sun, Feb 12, 2023 at 05:31:30PM +0100, Kevin Weis via nginx wrote:

> Hi,
> I aim to build nginx from source, statically linked, and run into issues 
> when `http_xslt_module` is enabled or I'm building with NJS 0.7.10 
> (which also needs xslt).
> 
> I've created a simplified docker build to debug this issue at 
> https://git.compilenix.org/CompileNix/docker-nginx-static
> 
> The error occures while running `./auto/configure` if 
> `--with-ld-opt="-static"` is added. The build succeeds without it 
> (remove line 176 from Dockerfile).
> 
> The configure ends with:
> ```
> checking for libxslt ... not found
> checking for libxslt in /usr/local/ ... not found
> checking for libxslt in /usr/pkg/ ... not found
> checking for libxslt in /opt/local/ ... not found
> 
> ./auto/configure: error: the HTTP XSLT module requires the libxml2/libxslt
> libraries. You can either do not enable the module or install the libraries.
> ```
> 
> The issue is not that libxml2 and libxslt aren't installed, they are.
> 
> I've looked into why libxslt is reported to be "not found" by inspecting 
> the configure log file `objs/autoconf.err`, which shows the following error:
> ``
> checking for libxslt
> 
> /usr/lib/gcc/x86_64-alpine-linux-musl/12.2.1/../../../../x86_64-alpine-linux-musl/bin/ld: 
> /usr/lib/gcc/x86_64-alpine-linux-musl/12.2.1/../../../../lib/libxml2.a(libxml2_la-xmlIO.o): 
> in function `xmlFreeZMemBuff':
> /home/buildozer/aports/main/libxml2/src/libxml2-2.10.3/xmlIO.c:1482: 
> undefined reference to `deflateEnd'
> /usr/lib/gcc/x86_64-alpine-linux-musl/12.2.1/../../../../x86_64-alpine-linux-musl/bin/ld: 
> /usr/lib/gcc/x86_64-alpine-linux-musl/12.2.1/../../../../lib/libxml2.a(libxml2_la-xmlIO.o): 
> in function `xmlGzfileOpenW':
> /home/buildozer/aports/main/libxml2/src/libxml2-2.10.3/xmlIO.c:1172: 
> undefined reference to `gzdopen'
> 
> <for more see full build log linked below>
> ```
> 
> Here is the full build log: 
> https://compilenix.org/static/95Yeyaxv/build-static.log
> 
> If you are wondering why I also build libxslt from source instead of 
> using the alpine `libxslt-dev` package.. `libxslt-dev` does not contain 
> "libxslt.a", which is required for static linking.
> 
> Additionally: I've also looked into other distros like ubuntu, fedora or 
> gentoo. None of them install "libxslt.a" and show the same configure 
> error messages.
> 
> Steps to reproduce:
> ```
> git clone https://git.compilenix.org/CompileNix/docker-nginx-static.git
> cd docker-nginx-static
> ./build.sh -t docker-nginx-static --no-cache | tee build.log
> ```
> 
> Any help, suggestions or hints are very welcome :)

Static linking requires more than just "-static".  In particular, 
for all the libraries being used you'll have to manually provide 
library dependencies.

The particular error suggests that libxml2 depends on zlib, so 
something like "--with-ld-opt="-static -lz"" should help.  
Likely there will be other similar errors and you'll have to 
include other libraries as well.  For example, on FreeBSD static 
linking with libxslt requires "-static -lz -lm -llzma -lmd".

Something like

    pkg-config --static libxslt

might be a good starting point for full list of required 
libraries, assuming libxslt package information is properly 
installed.  Alternatively, ldd on the dynamic library might be a 
good start.

Note well that in general it might not be a good idea to compile 
things statically unless you have some good reasons to and 
understand possible consequences.

-- 
Maxim Dounin
http://mdounin.ru/


More information about the nginx mailing list