2015-02-10 9 views
7

Ho scaricato il codice sorgente curl7.40, e ho già compilato openssl 1.0.2 codice sorgente, ora voglio compilare curl con openssl 1.0.2.Come compilare l'arricciatura con l'ultima versione

Dopo l'installazione, ldd arriccia la libreria ma continuo a collegarmi con la libreria predefinita di sistema. ldd libcurl.so linux-vdso.so.1 => (0x00007fff2db2e000) libidn.so.11 => /usr/lib/x86_64-linux-gnu/libidn.so.11 (0x00007fafb9b6e000) librtmp.so.0 => /usr/lib/x86_64-linux-gnu/librtmp.so.0 (0x00007fafb9954000) libssl.so.1.0.0 => /lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007fafb96f5000) libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007fafb931b000) ...

UPDATE
Dopo un po 'di ricerca, io uso sotto comando config.

./configure --prefix=/usr/local/curl-7.40.0 --with-ssl=/usr/local/openssl-1.0.2

Ma quando make install, che sarà mostrata sotto informazioni di errore.

../lib/.libs/libcurl.so: undefined reference to `SSLv2_client_method' 
collect2: error: ld returned 1 exit status 
+0

Il supporto SSLv2 viene rimosso da openssl 1.0.2. Potresti aver incluso da una versione SSL e librerie da un'altra. Guarda i registri di compilazione. C'è qualcosa come '-I/usr/local/openssl-1.0.2/include'? –

+0

sì, openssl rimuove il supporto sslv2, ma sembra che libcurl lo usi ancora. e da alcuni risultati di ricerca che suggeriscono di modificare il codice sorgente libcurl lib/ssluse.c per commentarlo, ma in 7.40, non trovo questo file. –

+0

libcurl è in grado di rilevare se openssl ha il supporto sslv2 in fase di configurazione. Guarda config.log e/o config.h. –

risposta

1

Il problema è probabile con come è stata creata la libreria OpenSSL.

È probabile che sia stato aperto openssl con SSLv2 disabilitato poiché alcune distribuzioni hanno disabilitato SSLv2 per impostazione predefinita. Guarda il ./config per il tuo sistema quando stai compilando OpenSSL e trova l'opzione che controlla il flag del preprocessore OPENSSL_NO_SSL2.
Per poter utilizzare la versione corretta di OpenSSL rendendo dai sorgenti, si può fare openssl in questo modo:

cd <path-to-openssl-dir> 
./config enable-ssl2 enable-ssl3 --prefix=<path-to-openssl-install-dir> 

Quindi, è possibile collegare la vostra versione ricciolo correttamente per OpenSSL da:

./configure --with-ssl=<path-to-openssl-install-dir> 
0

SSLv2_client_method() viene utilizzato in lib/vtls/openssl.c, riga 1575 con un check per la disponibilità di questa funzione tramite autoconf. Mi sembra che AC_CHECK_FUNCS di autoconf trovi erroneamente l'installazione di sistema di openssl che ha abilitato SSLv2 prima di #include nella propria installazione di openssl-1.0.2 che non ha SSLv2_client_method() e quindi presuppone che la funzione sia disponibile.

Prova a passare CFLAGS=-I/usr/local/openssl-1.0.2/include o addirittura "CFLAGS=-I/usr/local/openssl-1.0.2/include -DOPENSSL_NO_SSL2" come argomenti per ./configure per costringere openssl.c fare a meno del SSLv2_client_method() erroneamente assunto ad essere disponibili.