linux 编译 curl 出错

编译curl make 死活不通过,唉
执行参数如下,谢谢各位帮忙看看

这一步一切正常
root@debian:~/curl-7.45.0# ./configure --with-ssl

图片描述

make

一顿编译之后 ...... 然后出错了
../lib/.libs/libcurl.so: undefined reference to `SSLv2_client_method'
../lib/.libs/libcurl.so: undefined reference to `SSL_CTX_set_alpn_protos'
../lib/.libs/libcurl.so: undefined reference to `SSL_get0_alpn_selected'
collect2: error: ld returned 1 exit status
make[2]: *** [curl] Error 1
make[2]: Leaving directory `/root/curl-7.45.0/src'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/root/curl-7.45.0/src'
make: *** [all-recursive] Error 1

图片描述

openssl 也是编译的,参数如下

./config  shared zlib
已经编译成功

root@debian:~/curl-7.45.0# openssl version
OpenSSL 1.0.2d 9 Jul 2015
root@debian:~/curl-7.45.0#
阅读 20.4k
2 个回答

你的系统可能已经自带了OpenSSL,恰好这个版本禁用了SSL2,所以会出现

../lib/.libs/libcurl.so: undefined reference to `SSLv2_client_method'

(可以参考 http://stackoverflow.com/questions/8287515/problems-building-libcurl-7-21-2-on-ubuntu-11-10-hiphop

解决这个问题很简单,两种方法:

1.找一个支持SSL2的OpenSSL版本(比如OpenSSL 1.0.2),用下面的命令重新生成Makefile文件

./config shared

2.禁用SSL2

./config shared no-ssl2

(可以参考 http://stackoverflow.com/questions/9856812/apache-2-4-1-undefined-reference-to-sslv2-client-method

至于另外两个错误,依然是你的系统中已有OpenSSL造成的。解决问题也简单,假设你把OpenSSL装在了/usr/local/ssl,用下面的命令为curl生成正确的Makefile:

./configure --with-ssl=/usr/local/ssl

未来写代码需要用到libcurl的时候,也必须让编译器找到你自己编译安装的OpenSSL在哪:

export LD_LIBRARY_PATH = /usr/local/ssl/lib

(可以参考 https://github.com/tatsuhiro-t/nghttp2/issues/336

编译时候需要指定openssl源码的路径

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏