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