Force linking to static archives during make?

Ruslan Ermilov ru at nginx.com
Wed Dec 18 09:29:39 UTC 2013


On Tue, Dec 17, 2013 at 04:16:55PM -0500, Jeffrey Walton wrote:
> This should be my last build question.
> 
> $ ./auto/configure --with-http_ssl_module ...
> --with-cc-opt="-I/usr/local/ssl/include"
> --with-ld-opt="-L/usr/local/ssl/lib /usr/local/ssl/lib/libssl.a
> /usr/local/ssl/lib/libcrypto.a -ldl"
> ...
> $ make
> ...
> 
> Results in the following. Note that OpenSSL is still dynamically linked:
> 
> $ ldd objs/nginx
>     linux-vdso.so.1 =>  (0x00007fffd0dfe000)
>     libdl.so.2 => /lib64/libdl.so.2 (0x0000003ebf600000)
>     libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003ebfa00000)
>     libcrypt.so.1 => /lib64/libcrypt.so.1 (0x0000003ed3e00000)
>     libpcre.so.1 => /lib64/libpcre.so.1 (0x0000003ec0a00000)
>     libssl.so.1.0.0 => not found
>     libcrypto.so.1.0.0 => not found
>     libz.so.1 => /lib64/libz.so.1 (0x0000003ebfe00000)
>     libc.so.6 => /lib64/libc.so.6 (0x0000003ebf200000)
>     /lib64/ld-linux-x86-64.so.2 (0x0000003ebea00000)
>     libfreebl3.so => /lib64/libfreebl3.so (0x0000003ec7a00000)
> 
> *****
> 
> Adding -Bstatic does not help even though its clearly on the link command line:
> 
> $ ./auto/configure --with-http_ssl_module ...
> --with-cc-opt="-I/usr/local/ssl/include" --with-ld-opt="-Bstatic
> -L/usr/local/ssl/lib /usr/local/ssl/lib/libssl.a
> /usr/local/ssl/lib/libcrypto.a -ldl"
> ...
> $ make
> ...
> objs/src/http/modules/ngx_http_upstream_keepalive_module.o \
> objs/ngx_modules.o \
> -Bstatic -L/usr/local/ssl/lib /usr/local/ssl/lib/libssl.a
> /usr/local/ssl/lib/libcrypto.a -ldl -lpthread -lcrypt -lpcre -lssl
> -lcrypto -lz
> ...
> $ ldd objs/nginx
>     linux-vdso.so.1 =>  (0x00007fffd4fc6000)
>     libdl.so.2 => /lib64/libdl.so.2 (0x0000003ebf600000)
>     ...
>     libssl.so.1.0.0 => not found
>     libcrypto.so.1.0.0 => not found
> 
> *****
> 
> Omitting -L/usr/local/ssl/lib results in a failed configure.
> 
> *****
> 
> How does one force nginx to use static linking for a library?
> 
> Thanks in advance.

I can't tell for Linux, but on FreeBSD it's as simple as:

$ auto/configure --with-ld-opt=-static
[...]
$ make -sj4
$ file objs/nginx
objs/nginx: ELF 64-bit LSB executable, x86-64, version 1 (FreeBSD), statically linked, for FreeBSD 9.2 (902503), not stripped
$ ldd objs/nginx
ldd: objs/nginx: not a dynamic ELF executable



More information about the nginx mailing list