在官网http://curl.haxx.se/
./configure --prefix=/home/zhangfan/source_code/curl-7.26.0/build_lib/
--build=i686-linux --host=mips-linux --target=mips-linux \
--with-zlib=/home/zhangfan/source_code/curl-7.26.0/build_lib/
--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,
--prefix选项,所以编译好后也会在指定目录下生产lib文件夹并把库文件拷贝到这个文件夹中。
其他程序中需要用到curl时直接链接编译好的库文件即可。 就在编译其他程序时链接curl库出现如下错误
./lib/libcurl.so: could not read symbols: File in wrong format
库文件格式不对无法链接,经过查找发现(执行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
即可把编译好的库文件定为小端模式