How to compile a program with static libcurl? How to compile a program with static libcurl? curl curl

How to compile a program with static libcurl?


This is how it looks with dynamic libcurl.

$ ldd test    linux-vdso.so.1 (0x00007ffcca3aa000)    libcurl.so.4 => /usr/lib64/libcurl.so.4 (0x00007f5536ed6000)    libc.so.6 => /lib64/libc.so.6 (0x00007f5536b3e000)    libssl.so.1.0.0 => /usr/lib64/libssl.so.1.0.0 (0x00007f55368d3000)    libcrypto.so.1.0.0 => /usr/lib64/libcrypto.so.1.0.0 (0x00007f5536503000)    libz.so.1 => /lib64/libz.so.1 (0x00007f55362ed000)    /lib64/ld-linux-x86-64.so.2 (0x00007f5537138000)    libdl.so.2 => /lib64/libdl.so.2 (0x00007f55360e9000)

If you want to link only curl statically, do not use -static. Just add libcurl.a as one of the objects files or use -lcurl, you don't need to specify it twice.After

gcc test.c curl-7.44.0/lib/.libs/libcurl.a -lssl -lcrypto -ldl -lm -lz -DCURL_STATICLIB -o test

you'll get

$ ldd test    linux-vdso.so.1 (0x00007ffd9a0a7000)    libssl.so.1.0.0 => /usr/lib64/libssl.so.1.0.0 (0x00007f947cc7e000)    libcrypto.so.1.0.0 => /usr/lib64/libcrypto.so.1.0.0 (0x00007f947c8ae000)    libdl.so.2 => /lib64/libdl.so.2 (0x00007f947c6aa000)    libm.so.6 => /lib64/libm.so.6 (0x00007f947c3b1000)    libz.so.1 => /lib64/libz.so.1 (0x00007f947c19b000)    libc.so.6 => /lib64/libc.so.6 (0x00007f947be03000)    /lib64/ld-linux-x86-64.so.2 (0x00007f947cee9000)

-static means that you want link all statically. Then you need all libraries prepared as static and the result will be:

$ ldd test    not a dynamic executable


I found a way. libcurl must be configured with key "--enable-ares".

./configure --disable-shared --enable-static --prefix=/tmp/curl --disable-ldap --disable-sspi --without-librtmp --disable-ftp --disable-file --disable-dict --disable-telnet --disable-tftp --disable-rtsp --disable-pop3 --disable-imap --disable-smtp --disable-gopher --disable-smb --without-libidn --enable-ares

Then the program will feature gethostbyname and will be able to resolve the domain name.

Thank you all for the comments.