嵌入式 Linux下编译并使用curl静态库

本文介绍了如何在Linux环境下为x86和ARM平台配置并编译curl静态库,详细列出了编译选项。在编译过程中遇到的链接错误,如SSL相关函数未定义,通过添加特定链接选项得以解决。最后展示了如何使用curl-config获取静态链接所需库,并创建了一个简单的C程序来验证静态链接成功。
摘要由CSDN通过智能技术生成

 #x86
 ./configure --disable-shared --enable-static --disable-ftp --disable-ipv6 --disable-rtsp --disable-tftp --disable-telnet --disable-largefile --disable-smtp --disable-imap --without-ssl --without-libssh2 --without-zlib --without-librtmp --without-libidn --without-gnutls --disable-ldap --disable-ldaps --disable-pop3 --prefix=/qy_work/a3518_v080_develop/hi_test/curl/joseph_lib/x86
 
 #arm
 ./configure --host=arm-linux CC=arm-hisiv100nptl-linux-gcc --disable-shared --enable-static --disable-ftp --disable-ipv6 --disable-rtsp --disable-tftp --disable-telnet --disable-largefile --disable-smtp --disable-imap --without-ssl --without-libssh2 --without-zlib --without-librtmp --without-libidn --without-gnutls --disable-ldap --disable-ldaps --disable-pop3 --prefix=/qy_work/a3518_v080_develop/hi_test/curl/joseph_lib/arm
 

> wget http://curl.haxx.se/download/curl-7.29.0.tar.gz

 

> tar zxvf curl-7.29.0.tar.gz

 

> cd curl-7.29.0

 

> ./configure --prefix=/usr/local/curl --disable-shared --enable-static --without-libidn --without-ssl --without-librtmp --without-gnutls --without-nss --without-libssh2 --without-zlib --without-winidn --disable-rtsp --disable-ldap --disable-ldaps --disable-ipv6

 

> make 

 

> sudo make install

> vi a.c

#include <curl/curl.h>

int main() {

printf("%s\n", curl_version());

return 0;

}

 

> curl-config --static-libs

/usr/local/curl/lib/libcurl.a -lrt

 

> gcc a.c -static $(/usr/local/curl/bin/curl-config --static-libs --cflags)

 

 

> file a.out

a.out: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.24, BuildID[sha1]=0x251f05855bb8e2e633171019d5e6c4bcc3d80a80, not stripped

 

> ./a.out

libcurl/7.29.0

 

注意我这里不需要其它功能不需要ssl等,这里全disable掉,不然会在连接时报错:


linux下面 编译后生成了 libcurl.a 文件, 

但是在程序中静态链接  这个 libcurl.a 文件, 会发生很多的链接错误, 如果是动态链接 libcurl.a 文件则不会发生什么问题。


 /usr/lib/libcurl.a(ssluse.o): In function `Curl_ossl_init':

(.text+0xcd1): undefined reference to `SSL_library_init'

 /usr/lib/libcurl.a(ssluse.o): In function `Curl_ossl_connect_common':

(.text+0x1ba9): undefined reference to `SSL_get1_session'


上面随便挑几个错误。。。

后来经过一番折腾, 突然恍悟, 只需要添加下面的链接, 问题即可解决啊

-lcrypto -lidn -lssl /usr/lib/libcurl.a

这样编译生成的 可执行程序里面用 命令

 ldd  文件名    执行后, 依赖库里面已经没有  libcurl.so.4

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值