如何使用最新的openssl编译curl

时间:2015-02-10 07:39:04

标签: c linux curl openssl

我下载了curl7.40源代码,我已经编译了openssl 1.0.2源代码,现在我想用openssl 1.0.2编译curl。

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

make && make install

安装完成后,我发现卷曲库但仍然与系统默认库链接。 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) ...

更新
经过一些搜索,我使用下面的命令来配置。

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

但是当make install时,它会显示以下错误信息。

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

2 个答案:

答案 0 :(得分:1)

问题可能在于如何构建OpenSSL库。

您可能已禁用SSLv2构建openssl,因为某些发行版默认情况下禁用SSLv2。在编译OpenSSL时查看系统的./config,并找到控制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>

答案 1 :(得分:0)

SSLv2_client_method()用于lib / vtls / openssl.c,第1575行,check,可通过autoconf获取此功能。在我看来,autoconf的AC_CHECK_FUNCS错误地找到你的系统安装了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,以便在{0}}错误地认为不可用的情况下进行操作。