2015-02-10 3 views
7

Загрузите исходный код curl7.40, и я уже скомпилировал openssl 1.0.2 исходный код, теперь я хочу скомпилировать curl с openssl 1.0.2.Как скомпилировать curl с последними openssl

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

make && make install 

После установки я ldd ломаю библиотеку, но по-прежнему связываюсь с системой по умолчанию. 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
После некоторого поиска я использую следующую команду для конфигурации.

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

Но когда сделать установки, это будет показано ниже информация об ошибке.

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

Поддержка SSLv2 удалена из openssl 1.0.2. Возможно, у вас есть одна версия SSL и библиотеки из другой. Посмотрите журналы компиляции. Есть что-то вроде '-I/usr/local/openssl-1.0.2/include'? –

+0

yes, openssl remove sslv2 support, но, похоже, libcurl все еще использует его. и из некоторого результата поиска, предлагающего изменить исходный код libcurl lib/ssluse.c на комментарии к нему, но в 7.40 я не нахожу этот файл. –

+0

libcurl знает, может ли opensl поддерживать sslv2 на этапе настройки. Посмотрите на config.log и/или config.h. –

ответ

1

Проблема, вероятно, связана с тем, как вы создали библиотеку OpenSSL.

Скорее всего, вы создали openssl с отключенным SSLv2, поскольку некоторые дистрибутивы по умолчанию отключили SSLv2. Посмотрите на ./config для вашей системы при компиляции OpenSSL и найдите параметр, который контролирует флаг препроцессора OPENSSL_NO_SSL2.
Для того, чтобы использовать правильную версию OpenSSL, делая из источника, вы можете сделать OpenSSL, как это:

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

Затем вы можете связать свой локон версию правильно OpenSSL по:

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

SSLv2_client_method() используется в lib/vtls/openssl.c, строка 1575 с check для получения этой функции через autoconf. Мне кажется, что AC_CHECK_FUNCS autoconf неправильно обнаруживает вашу систему установки openssl, которая имеет SSLv2, включенную до #include, используя собственную установку openssl-1.0.2, которая не имеет SSLv2_client_method() и, следовательно, предполагает, что функция будет доступна.

Попробуйте прохождение CFLAGS=-I/usr/local/openssl-1.0.2/include или даже "CFLAGS=-I/usr/local/openssl-1.0.2/include -DOPENSSL_NO_SSL2" в качестве аргументов ./configure, чтобы заставить openssl.c обойтись без SSLv2_client_method() ошибочно предположил, что будут доступны.

Смежные вопросы