我下载了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
答案 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}}错误地认为不可用的情况下进行操作。