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