您的位置:首页 > 其它

curl交叉编译

2016-02-24 10:22 148 查看
在官网http://curl.haxx.se/ 下载 7.26.0源码包后直接解压,由于目标运行平台为mips-linux遂修改源码配置为以下信息

./configure --prefix=/home/zhangfan/source_code/curl-7.26.0/build_lib/ --enable-shared --enable-static=no \

--build=i686-linux --host=mips-linux --target=mips-linux \

--with-zlib=/home/zhangfan/source_code/curl-7.26.0/build_lib/ --enable-nonblocking \

--disable-tftp --disable-telnet --disable-manual --enable-file \

--without-libssh2 --without-ssl --without-random --without-gnutls \

--without-nss --without-ca-bundle --without-libidn \

--disable-ipv6 --disable-largefile

重点在 --builde --host --target, 其他只是功能的选择

build:

执行代码编译的主机,正常的话就是你的主机系统。这个参数一般由config.guess来猜就可以。当然自己指定也可以。

host:

编译出来的二进制程序所执行的主机,因为绝大多数是如果本机编译,本机执行。所以这个值就等于build。只有交叉编译的时候(也就是本机编译,其他系统机器执行)才会build和host不同。用host指定运行主机。

target:

这个选项只有在建立交叉编译环境的时候用到,正常编译和交叉编译都不会用到。他用build主机上的编译器,编译一个新的编译器(binutils, gcc,gdb等),这个新的编译器将来编译出来的其他程序将运行在target指定的系统上

配置完成后执行make clean; make install, 默认会把编译好的库文件放到lib/.libs 目录下, 这里有加入

--prefix选项,所以编译好后也会在指定目录下生产lib文件夹并把库文件拷贝到这个文件夹中。

其他程序中需要用到curl时直接链接编译好的库文件即可。 就在编译其他程序时链接curl库出现如下错误

./lib/libcurl.so: could not read symbols: File in wrong format

库文件格式不对无法链接,经过查找发现(执行file ./lib/libcurl.so)

file ./lib/libcurl.so

./lib/libcurl.so: ELF 32-bit MSB shared object, MIPS, MIPS32 version 1 (SYSV), dynamically linked

编译出来的libcurl.so 为 MSB 大端模式,而程序需要的是小端,导致格式不对。

解决该问题的方法是在配置curl源码时

--host=mips-linux --target=mips-linux 改为 --host=mipsel-linux --target=mipsel-linux

即可把编译好的库文件定为小端模式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: