交叉编译与解决头文件和库依赖问题

嵌入式开发中常用到交叉编译,一般在没有复杂依赖关系时可以直接编译。但如果依赖其它的库,编译时需要先来交叉编译库,再来交叉编译应用程序,以本例程依赖的curl为例进行描述:

没有依赖库,第一次编译时会提示如下错误

arm-linux-gnueabihf-gcc SpeakerSimu.c -o speak -lcurl -ljanssonvlc
SpeakerSimu.c:15:25: fatal error: curl/curl.h: 没有那个文件或目录
 #include <curl/curl.h>  
                         ^
compilation terminated.

根据错误提示下载curl源码进行交叉编译,过程如下:

cd curl-4.74.0

./configure --host=arm-linux-gnueabihf --build=x86_64-pc-linux-gnu --prefix=/home/carl/work/rk3229/work/curl_build

make

make install

此处遇到的问题点:我使用的是交叉编译工具链为arm-linux-gnueabihf-gcc,版本号如下

gcc version 5.4.0 20160609 (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.4)

下载的源码为2017年11月29号最新release的curl-7.57.0.tar.gz版本,交叉编译时报错

configure: error: Unable to link function recv

网上没有查到具体的错误原因,只在网站上写这降到curl7.47版本可以正常使用,因此后续使用此版本进行编译。可能更新交叉编译链版本也能解决次问题。

安装完成之后会在curl_build目录下生成对应的include头文件和lib库

至此可以使用新生成的头文件和库交叉编译应用程序:

arm-linux-gnueabihf-gcc SpeakerSimu.c -o SpeakerSimu -lcurl -I/home/carl/work/rk3229/work/curl_build/include -L/home/carl/work/rk3229/work/curl_build/lib 

NOTE:生成的可执行文件移植到开发板后运行时需要开发板中的curl运行环境,如果开发板中库版本与交叉编译使用的库版本不一致,也可能出现其它问题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值