Es gibt einen folgenden Code:Wie kompiliere ich ein Programm mit statischer libcurl?
#include <stdio.h>
#include <curl/curl.h>
int main(void){
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl == NULL)
return 0;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/getAccessAttributes?id=1");
res = curl_easy_perform(curl);
if(res != CURLE_OK) {
fprintf(stderr, "Error: %s\n", curl_easy_strerror(res));
return 0;
}
curl_easy_cleanup(curl);
return 0;
}
Alles funktioniert gut, wenn man es aus dem Dynamic Link Library sammeln:
gcc test.c -lcurl -o test
Jetzt möchte ich ein statisches Programm erhöhen:
gcc test.c /tmp/curl/lib/libcurl.a -static -lcurl -lssl -lcrypto -ldl -lm -lz -DCURL_STATICLIB -I/tmp/curl/include -o test
Er geht mit Fehlern:
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libcrypto.a(dso_dlfcn.o): In der Funktion
dlfcn_globallookup': (.text+0x11): warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking /tmp/curl/lib/libcurl.a(libcurl_la-netrc.o): In function
Curl_parsenetrc ': netrc. c :(. text + 0x3c8): warning: Die Verwendung von 'getpwuid_r' in statisch verknüpften Anwendungen erfordert zur Laufzeit die gemeinsam genutzten Bibliotheken aus der zum Verknüpfen verwendeten glibc-Version /tmp/curl/lib/libcurl.a(libcurl_la-curl_addrinfo.o) : in Funktion `Curl_getaddrinfo_ex ':. curl_addrinfo.c :(text + 0x60): Warnung: mit 'erfordert für die gemeinsam genutzten Bibliotheken von der glibc Version zur Laufzeit getaddrinfo' in statisch gelinkte Anwendungen
Das Programm verbindet funktioniert nur, wenn Sie eine Host-IP-Adresse und nicht example.com angeben. Andernfalls kann das Programm den Domain-Namen nicht auflösen:
$ ./test
Error: Couldn't resolve host name
Wie kann ich das Problem der Namensauflösung zu lösen? Vielen Dank!
P.S. Static Libcurl Ich sammelte die folgende Methode:
wget http://curl.haxx.se/download/curl-7.44.0.tar.lzma
tar xf curl-7.44.0.tar.lzma
cd curl-7.44.0
./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
make && make install
Ich sehe nicht, wie die von Ihnen geposteten Warnungen sich auf das von Ihnen beschriebene Problem beziehen. –
Sie möchten mit den statischen Versionen von __all__ Bibliotheken oder einfach mit 'libcurl' verlinken?Auch warum geben Sie es zweimal an (das von 'tmp' und' -lcurl'; Sie sollten '-L' verwenden, um Bibliothekspfade anzugeben: Überprüfen Sie [ld man page] (http://linux.die.net /man/1/ld)).Nach dem statischen Erstellen Ihrer Anwendung, was ist 'ldd test' Ausgabe? – CristiFati