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
即可把编译好的库文件定为小端模式
./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
即可把编译好的库文件定为小端模式
相关文章推荐
- ADO编程笔记-记录遇到的问题
- 《时间同步介绍及实战配置——介绍定时任务及简单配置》
- 文本框输入测试用例
- MVC———用自定义扩展类实现验证
- c语言入门之项目3.7——用for循环输出一个等腰直角三角形
- Example #1 Serializing a single value with WDDX
- 23. gicqd
- Socket的使用
- Restful形式接口文档生成之Swagger与SpringMVC整合手记
- 存储过程定位问题
- visual studio 2013 error: Page '312e8a59-2712-48a1-863e-0ef4e67961fc' not found.
- 22. ggv
- Git 学习笔记(二)
- memcache命令说明
- 2016年1月“.中国”域名总量创新高 超过51.7万
- 网络库(1):libevent相关
- 238. Product of Array Except Self
- Wijmo5 Flexgrid基础教程:增加和删除
- Caffe: solver及其配置
- 深入浅出-iOS的TCP/IP协议族剖析&&Socket