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

Jeffrey Walton noloader at gmail.com
Mon Mar 28 19:42:22 UTC 2022


On Mon, Mar 28, 2022 at 3:35 PM Fabiano Furtado Pessoa Coelho
<fusca14 at gmail.com> 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



More information about the nginx mailing list