NGINX "--with-zlib=..." linker error

Fabiano Furtado Pessoa Coelho fusca14 at gmail.com
Mon Mar 28 20:01:59 UTC 2022


Hi, Jeffrey!

The official documentation at http://nginx.org/en/docs/configure.html said:
--with-zlib=path
    sets the path to the sources of the zlib library. The library
distribution (version 1.1.3 — 1.2.11) needs to be downloaded from the
zlib site and extracted. The rest is done by nginx’s ./configure and
make. The library is required for the ngx_http_gzip_module module.

... and I thought the source files directory needed to be untouchable! :)

I'm gonna try it tomorrow.

Thanks.

On Mon, Mar 28, 2022 at 4:45 PM Jeffrey Walton <noloader at gmail.com> wrote:
>
> On Mon, Mar 28, 2022 at 3:35 PM Fabiano Furtado Pessoa Coelho
> wrote:
> >
> > Hi...
> >
> > I'm using https://nginx.org/packages/rhel/8/SRPMS/nginx-1.20.2-1.el8.ngx.src.rpm
> > to compile NGINX to RHEL 8.5, with "--with-openssl=/openssl_1_1_1n"
> > parameter in the "%define BASE_CONFIGURE_ARGS" .SPEC file, and it
> > works fine. The NGINX package is compiled without errors.
> >
> > Now I want to add the "--with-zlib=/zlib_1_2_12" parameter, to compile
> > NGINX with the latest zlib version 1.2.12, and I get these linker
> > errors:
> >
> > ...
> > objs/ngx_modules.o \
> > -Wl,-z,relro -Wl,-z,now -pie -ldl -lpthread -lpthread -lcrypt -lpcre
> > /openssl_1_1_1n/.openssl/lib/libssl.a
> > /openssl_1_1_1n/.openssl/lib/libcrypto.a -ldl -lpthread
> > /zlib_1_2_12/libz.a \
> > -Wl,-E
> > /usr/bin/ld: /zlib_1_2_12/libz.a(deflate.o): relocation R_X86_64_32S
> > against symbol `_length_code' can not be used when making a PIE
> > object; recompile with -fPIC
> > /usr/bin/ld: /zlib_1_2_12/libz.a(inflate.o): relocation R_X86_64_32S
> > against symbol `zcfree' can not be used when making a PIE object;
> > recompile with -fPIC
> > /usr/bin/ld: /zlib_1_2_12/libz.a(inftrees.o): relocation R_X86_64_32S
> > against `.rodata' can not be used when making a PIE object; recompile
> > with -fPIC
> > /usr/bin/ld: /zlib_1_2_12/libz.a(trees.o): relocation R_X86_64_32S
> > against symbol `_length_code' can not be used when making a PIE
> > object; recompile with -fPIC
> > /usr/bin/ld: /zlib_1_2_12/libz.a(zutil.o): relocation R_X86_64_32
> > against `.rodata.str1.1' can not be used when making a PIE object;
> > recompile with -fPIC
> > /usr/bin/ld: /zlib_1_2_12/libz.a(crc32.o): relocation R_X86_64_32S
> > against `.rodata' can not be used when making a PIE object; recompile
> > with -fPIC
> > /usr/bin/ld: /zlib_1_2_12/libz.a(inffast.o): relocation R_X86_64_32S
> > against `.rodata.str1.1' can not be used when making a PIE object;
> > recompile with -fPIC
> > /usr/bin/ld: final link failed: Nonrepresentable section on output
> > collect2: error: ld returned 1 exit status
> > ...
> >
> > Is there a solution for this linker issue?
>
> Rebuild zLib. Use -fPIC when building it.
>
> zlib is an old makefile-based library. You usually need to patch it
> heavily to get it to honor CPPFLAGS, CFLAGS and CXXFLAGS. The easiest
> thing to do would be open the makefile and just add the flag by hand.
>
> Here's an example of a zlib patch to generalize the makefile so it
> honors user flags:
> https://github.com/noloader/Build-Scripts/blob/master/patch/zlib.patch
> .
>
> Jeff
> _______________________________________________
> nginx mailing list -- nginx at nginx.org
> To unsubscribe send an email to nginx-leave at nginx.org



More information about the nginx mailing list