C'è un codice seguente:Come compilare un programma con libcurl statico?
#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;
}
Tutto funziona bene se si raccolgono dalla libreria di collegamento dinamico:
gcc test.c -lcurl -o test
Ora vorrei sollevare un programma statico:
gcc test.c /tmp/curl/lib/libcurl.a -static -lcurl -lssl -lcrypto -ldl -lm -lz -DCURL_STATICLIB -I/tmp/curl/include -o test
Lui sta andando con errori:
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libcrypto.a(dso_dlfcn.o): nella funzione
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 :(. testo + 0x3c8): avviso: l'utilizzo di 'getpwuid_r' in applicazioni collegate staticamente richiede in fase di esecuzione le librerie condivise dalla versione glibc utilizzata per il collegamento di /tmp/curl/lib/libcurl.a(libcurl_la-curl_addrinfo.o) : in funzione `Curl_getaddrinfo_ex ':. curl_addrinfo.c :(testo + 0x60): avviso: Utilizzo 'getaddrinfo' in applicazioni collegate staticamente richiede in fase di esecuzione le librerie condivise dalla versione glibc utilizzati per il collegamento
il programma funziona solo se si specifica un indirizzo IP host e non example.com. In caso contrario, il programma non può risolvere il nome di dominio:
$ ./test
Error: Couldn't resolve host name
Come posso risolvere il problema della risoluzione dei nomi? Grazie!
P.S. libcurl statico ho raccolto il seguente metodo:
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
Non vedo come gli avvisi che pubblichi riguardano il problema che descrivi. –
Vuoi collegarti alle versioni statiche delle librerie __all__ o semplicemente con 'libcurl'?Anche perché lo specifichi due volte (quello da 'tmp' e' -lcurl', dovresti usare '-L' per specificare i percorsi della libreria: controlla [ld man page] (http://linux.die.net /man/1/ld)).Dopo aver creato staticamente la tua applicazione, qual è l'output 'ldd test'? – CristiFati