文档章节

linux下源码编译curl报错.

mac_zhao
 mac_zhao
发布于 2014/11/25 17:24
字数 1265
阅读 718
收藏 1
说明: 由于现网的php不带curl功能, 需要编译生成一个libcurl.so给php生成curl.so模块用. 并且需要支持 openssl . 编译的过程并不顺利, 这里做下记录备忘.

使用如下configure命令生成配置文件. ssl是提前编译好的 openssl .
    ./configure --prefix=/home/nemo/progs/curl --with-ssl=/home/nemo/progs/ssl

问题1编译报错:
Making all in src
make[1]: Entering directory `/data/home/nemo/libs/curl-7.27.0/src'
make  all-am
make[2]: Entering directory `/data/home/nemo/libs/curl-7.27.0/src'
/bin/sh ../libtool --tag=CC --mode=link gcc  -g0 -O2 -Wno-system-headers    -L/home/nemo/progs/ssl/lib -o curl  hugehelp.o tool_binmode.o tool_bname.o tool_cb_dbg.o tool_cb_hdr.o tool_cb_prg.o tool_cb_rea.o tool_cb_see.o tool_cb_wrt.o tool_cfgable.o tool_convert.o tool_dirhie.o tool_doswin.o tool_easysrc.o tool_formparse.o tool_getparam.o tool_getpass.o tool_help.o tool_helpers.o tool_homedir.o tool_libinfo.o tool_main.o tool_metalink.o tool_mfiles.o tool_msgs.o tool_operate.o tool_operhlp.o tool_panykey.o tool_paramhlp.o tool_parsecfg.o tool_setopt.o tool_sleep.o tool_urlglob.o tool_util.o tool_vms.o tool_writeenv.o tool_writeout.o tool_xattr.o strtoofft.o strdup.o rawstr.o nonblock.o  ../lib/libcurl.la -lrt -lz  
libtool: link: gcc -g0 -O2 -Wno-system-headers -o .libs/curl hugehelp.o tool_binmode.o tool_bname.o tool_cb_dbg.o tool_cb_hdr.o tool_cb_prg.o tool_cb_rea.o tool_cb_see.o tool_cb_wrt.o tool_cfgable.o tool_convert.o tool_dirhie.o tool_doswin.o tool_easysrc.o tool_formparse.o tool_getparam.o tool_getpass.o tool_help.o tool_helpers.o tool_homedir.o tool_libinfo.o tool_main.o tool_metalink.o tool_mfiles.o tool_msgs.o tool_operate.o tool_operhlp.o tool_panykey.o tool_paramhlp.o tool_parsecfg.o tool_setopt.o tool_sleep.o tool_urlglob.o tool_util.o tool_vms.o tool_writeenv.o tool_writeout.o tool_xattr.o strtoofft.o strdup.o rawstr.o nonblock.o  -L/home/nemo/progs/ssl/lib ../lib/.libs/libcurl.so -lrt -lz -Wl,-rpath -Wl,/home/nemo/progs/curl/lib
../lib/.libs/libcurl.so:  undefined  reference to `EVP_enc_null'
../lib/.libs/libcurl.so:  undefined  reference to `COMP_compress_block'
../lib/.libs/libcurl.so:  undefined  reference to `COMP_CTX_new'
../lib/.libs/libcurl.so:  undefined  reference to `SRP_Calc_B'
../lib/.libs/libcurl.so:  undefined  reference to `BIO_s_socket'
../lib/.libs/libcurl.so:  undefined  reference to `pqueue_next'
../lib/.libs/libcurl.so:  undefined  reference to `pqueue_insert'
../lib/.libs/libcurl.so:  undefined  reference to `SRP_check_known_gN_param'
../lib/.libs/libcurl.so:  undefined  reference to `COMP_expand_block'
../lib/.libs/libcurl.so:  undefined  reference to `pqueue_peek'
../lib/.libs/libcurl.so:  undefined  reference to `SRP_Calc_x'
../lib/.libs/libcurl.so:  undefined  reference to `pqueue_free'
../lib/.libs/libcurl.so:  undefined  reference to ` OPENSSL _DIR_read'
../lib/.libs/libcurl.so:  undefined  reference to `SRP_Calc_client_key'
../lib/.libs/libcurl.so:  undefined  reference to `X509_STORE_set_default_paths'
../lib/.libs/libcurl.so:  undefined  reference to `COMP_CTX_free'
../lib/.libs/libcurl.so:  undefined  reference to `pqueue_find'
../lib/.libs/libcurl.so:  undefined  reference to `pqueue_pop'
../lib/.libs/libcurl.so:  undefined  reference to `pitem_free'
../lib/.libs/libcurl.so:  undefined  reference to `SRP_create_verifier_BN'
../lib/.libs/libcurl.so:  undefined  reference to `SRP_Verify_B_mod_N'
../lib/.libs/libcurl.so:  undefined  reference to `pqueue_iterator'
../lib/.libs/libcurl.so:  undefined  reference to `SRP_get_default_gN'
../lib/.libs/libcurl.so:  undefined  reference to `pqueue_size'
../lib/.libs/libcurl.so:  undefined  reference to `X509_certificate_type'
../lib/.libs/libcurl.so:  undefined  reference to `SRP_Calc_server_key'
../lib/.libs/libcurl.so:  undefined  reference to `SRP_Verify_A_mod_N'
../lib/.libs/libcurl.so:  undefined  reference to `SRP_Calc_A'
../lib/.libs/libcurl.so:  undefined  reference to `pqueue_new'
../lib/.libs/libcurl.so:  undefined  reference to `SRP_Calc_u'
../lib/.libs/libcurl.so:  undefined  reference to ` OPENSSL _DIR_end'
../lib/.libs/libcurl.so:  undefined  reference to `COMP_zlib'
../lib/.libs/libcurl.so:  undefined  reference to `ERR_load_crypto_strings'
../lib/.libs/libcurl.so:  undefined  reference to `X509_STORE_load_locations'
../lib/.libs/libcurl.so:  undefined  reference to `pitem_new'
collect2: ld returned 1 exit status
make[2]: *** [curl] Error 1
make[2]: Leaving directory `/data/home/nemo/libs/curl-7.27.0/src'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/data/home/nemo/libs/curl-7.27.0/src'
make: *** [all-recursive] Error 1

分析:
1) 这些报错未定义的符号是什么符号? 是属于哪个库的? 是 openssl 的吗? (可以通过nm ssl的so或库查看)
   经查是, crypto库的
2) 那么crypto库在哪里? 有没有默认链接进来?
   经查是个crypto.a文件, 放在了ssl的编译号的同级目录里 : /home/nemo/progs/ssl/lib/libcrypto.a
   另外, 系统默认也带了crypto :  /usr/local/ssl/lib/libcrypto.a

   另外, 查看编译链接的选项, 指定了对应的目录, -L/home/nemo/progs/ssl/lib
   但是却没有指定 -lcrypto ?!!!
  
   解决: 进入src目录, 手动执行链接命令, 在最后补上 crypto 即可通过.
   /bin/sh ../libtool --tag=CC --mode=link gcc  -g0 -O2 -Wno-system-headers    -L/home/nemo/progs/ssl/lib -o curl  hugehelp.o tool_binmode.o tool_bname.o tool_cb_dbg.o tool_cb_hdr.o tool_cb_prg.o tool_cb_rea.o tool_cb_see.o tool_cb_wrt.o tool_cfgable.o tool_convert.o tool_dirhie.o tool_doswin.o tool_easysrc.o tool_formparse.o tool_getparam.o tool_getpass.o tool_help.o tool_helpers.o tool_homedir.o tool_libinfo.o tool_main.o tool_metalink.o tool_mfiles.o tool_msgs.o tool_operate.o tool_operhlp.o tool_panykey.o tool_paramhlp.o tool_parsecfg.o tool_setopt.o tool_sleep.o tool_urlglob.o tool_util.o tool_vms.o tool_writeenv.o tool_writeout.o tool_xattr.o strtoofft.o strdup.o rawstr.o nonblock.o  ../lib/libcurl.la -lrt -lz  -lcrypto

问题2 
发现编译出来的libcurl.so虽然成功编译出来了, 通过ldd -r 查看, 仍然包含了很多未定义的符号, 就像上面的编译curl可执行文件报错的符号一样.

nemo@ISD_36_57_sles10sp1:[curl-7.20.1]$ ldd -r ./lib/.libs/libcurl.so
undefined   symbol : X509_certificate_type    (./lib/.libs/libcurl.so)
undefined  symbol : COMP_CTX_free    (./lib/.libs/libcurl.so)
undefined  symbol : COMP_CTX_new    (./lib/.libs/libcurl.so)
undefined  symbol : COMP_compress_block    (./lib/.libs/libcurl.so)
undefined  symbol : COMP_expand_block    (./lib/.libs/libcurl.so)
undefined  symbol : pqueue_find    (./lib/.libs/libcurl.so)
undefined  symbol : pitem_new    (./lib/.libs/libcurl.so)
undefined  symbol : pqueue_insert    (./lib/.libs/libcurl.so)
undefined  symbol : pqueue_iterator    (./lib/.libs/libcurl.so)
undefined  symbol : pqueue_next    (./lib/.libs/libcurl.so)
undefined  symbol : pitem_free    (./lib/.libs/libcurl.so)
undefined  symbol : pqueue_pop    (./lib/.libs/libcurl.so)
undefined  symbol : pqueue_peek    (./lib/.libs/libcurl.so)
undefined  symbol : X509_STORE_load_locations    (./lib/.libs/libcurl.so)
undefined  symbol : X509_STORE_set_default_paths    (./lib/.libs/libcurl.so)
undefined  symbol : BIO_s_socket    (./lib/.libs/libcurl.so)
undefined  symbol : ERR_load_crypto_strings    (./lib/.libs/libcurl.so)
undefined  symbol: OPENSSL _DIR_read    (./lib/.libs/libcurl.so)
undefined  symbol: OPENSSL _DIR_end    (./lib/.libs/libcurl.so)
    linux-gate.so.1 =>  (0xbfffe000)
    librt.so.1 => /lib/librt.so.1 (0xb7cf4000)
    libdl.so.2 => /lib/libdl.so.2 (0xb7cf0000)
    libz.so.1 => /lib/libz.so.1 (0xb7cde000)
    libc.so.6 => /lib/libc.so.6 (0xb7bbd000)
    libpthread.so.0 => /lib/libpthread.so.0 (0xb7ba9000)
    /lib/ld-linux.so.2 (0x80000000)
undefined  symbol : COMP_zlib    (./lib/.libs/libcurl.so)
undefined  symbol : EVP_enc_null    (./lib/.libs/libcurl.so)
undefined  symbol : SRP_Calc_A    (./lib/.libs/libcurl.so)
undefined  symbol : SRP_check_known_gN_param    (./lib/.libs/libcurl.so)
undefined  symbol : SRP_Verify_B_mod_N    (./lib/.libs/libcurl.so)
undefined  symbol : SRP_Calc_u    (./lib/.libs/libcurl.so)
undefined  symbol : SRP_Calc_x    (./lib/.libs/libcurl.so)
undefined  symbol : SRP_Calc_client_key    (./lib/.libs/libcurl.so)
undefined  symbol : SRP_Verify_A_mod_N    (./lib/.libs/libcurl.so)
undefined  symbol : SRP_Calc_server_key    (./lib/.libs/libcurl.so)
undefined  symbol : SRP_get_default_gN    (./lib/.libs/libcurl.so)
undefined  symbol : SRP_create_verifier_BN    (./lib/.libs/libcurl.so)
undefined  symbol : SRP_Calc_B    (./lib/.libs/libcurl.so)
undefined  symbol : pqueue_free    (./lib/.libs/libcurl.so)
undefined  symbol : pqueue_new    (./lib/.libs/libcurl.so)
undefined  symbol : pqueue_size    (./lib/.libs/libcurl.so   

分析:
    经过把整个make的成 >make.log 2>&1, 定向到文件里面, 发现make.log有如下可疑的地方.
    ... // 省了好多.
    -L/home/nemo/progs/ssl/lib -lrt -lcrypto -lssl -ldl -lz  -O2   -Wl,-soname -Wl,libcurl.so.4 -o .libs/libcurl.so.4.2.0

    -lcrypto -lssl , crypto居然放在ssl的前面 ? 如果ssl依赖crypto, 应该ssl放在前面才对. 
解决:
    进入lib目录, 修改Makefile
    LIBCURL_LIBS = -lssl -lcrypto -lrt -lcrypto -lssl -ldl -lz  => 
     LIBCURL_LIBS = -lssl -lcrypto -lrt -ldl -lz  即可.

总结, 编译生成curl时, 需手动命令行加入 -lcrypto编译;(改Makefile不管用) 变成生成libcurl.so时, 可以修改Makefile编译.

© 著作权归作者所有

mac_zhao
粉丝 42
博文 249
码字总数 304671
作品 0
普陀
程序员
私信 提问
yum换国内源 yum下载rpm包 源码包安装

yum换国内源 有时候系统自带的 先删除本地光盘制作的yum源:cd /etc/yum.repos.d rm -f dvd.repo 复制系统自带的yum源到yum.repos.d目录下:cp ../yum.repos.d_bak/* . 删除CentOS-Base.rep...

黄昏残影
2018/06/27
66
0
Suse 11的curl如何开启支持https?

系统安装好已经有了openssl,curl等,但是curl的ssl支持是默认关闭的 如下: curl -G https://192.168.1.203/sdk -G curl: (1) Protocol https not supported or disabled in libcurl 用源码......

开源中国首席打酱油啊哎滴
2014/07/31
724
1
Ubuntu交叉编译kernel内核出错,请教如何才能通过?

在ubuntu13.04系统中,使用arm-linux-gcc4.4.3编译内核,linux-2.6.32.2和3.10两个版本的源码编译均出现了以下的报错。看这个报错是moto的PCAP驱动程序编译出错,我使用make menuconfig 去掉...

小秘书
2014/02/27
858
0
Android 源码编译make的错误处理

Android源码下载:官方下载 或参考android源码下载方式 Android编译版本: PLATFORM_VERSION=4.0.1(最新Android 4.0.1) OS 操作系统平台: Linux yanggang 2.6.35-30-generic #61-Ubuntu ...

长平狐
2013/01/06
2.1K
0
CentOS7-Python系列】之一【python-devel教训】

1、一些Python包安装 [root@v6i6v ~]# pip install virtualenv [root@v6i6v v6i6v]# pwd /home/v6i6v 使用虚拟环境,注意在新建虚拟环境时,可以选择是否使虚拟环境读取系统python的包。 若不...

测试-說不
2016/04/11
661
0

没有更多内容

加载失败,请刷新页面

加载更多

CSS--列表

一、列表标识项 list-style-type none:去掉标识项 disc:默认实心圆 circle:空心圆 squire:矩形 二、列表项图片 list-style-img: 取值:url(路径) 三、列表项位置 list-style-position:...

wytao1995
今天
4
0
linux 命令-文本比较comm、diff、patch

本文原创首发于公众号:编程三分钟 今天学了三个文本比较的命令分享给大家。 comm comm 命令比较相同的文本 $ cat charabc$ cat chardiffadc 比如,我有两个文件char和chardiff如上,...

编程三分钟
今天
7
0
QML教程

https://blog.csdn.net/qq_40194498/article/category/7580030 https://blog.csdn.net/LaineGates/article/details/50887765...

shzwork
今天
5
0
HA Cluster之5

对于使用heartbeat v2版的CRM配置的集群信息都是保存在一个名为cib.xml的配置文件中,存放在/var/lib/heartbeat/crm/下。CIB:Cluster Information Base,由于xml文件配置不是那么方便,所以...

lhdzw
今天
6
0
玩转Redis-Redis基础数据结构及核心命令

  《玩转Redis》系列文章主要讲述Redis的基础及中高级应用,文章基于Redis5.0.4+。本文主要讲述Redis的数据结构String,《玩转Redis-Redis基础数据结构及核心命令》相关操作命令为方便对比...

zxiaofan666
今天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部