【背景】
最近折腾了用crosstool-ng在cygwin和Ubuntu下面的:
制作交叉工具链:
【记录】重试使用最新版本1.18.0的crosstool-ng去配置和编译xscale的交叉编译器
【记录】Ubuntu下用crosstool-ng为xscale建立交叉编译器arm-xscale-linux-gnueabi-gcc
用交叉编译器去编译各种库:
【记录】Cygwin下用arm-xscale-linux-gnueabi交叉编译xmlrpc
【记录】Cygwin下用arm-xscale-linux-gnueabi-gcc交叉编译curl(libcurl)
【记录】Cygwin下用arm-xscale-linux-gnueabi交叉编译libxml2
【记录】Cygwin下用arm-xscale-linux-gnueabi交叉编译log4c
【记录】Cygwin下用arm-xscale-linux-gnueabi交叉编译expat
【记录】用交叉编译器arm-xscale-linux-gnueabi交叉编译一个基于嵌入式Linux的无线HART的项目
【记录】Ubuntu下用arm-xscale-linux-gnueabi交叉编译xmlrpc
【记录】Ubuntu下用arm-xscale-linux-gnueabi交叉编译curl(libcurl)
【记录】Ubuntu下用arm-xscale-linux-gnueabi交叉编译libxml2
然后对于交叉编译,有点心得,现总结如下:
交叉编译库时所最常用到的配置
由:
而知,一般编译都是:
./configure xxx
make
make install
此处,对于./configure的xxx,我最常用的是:
./configure --prefix=YOUR_INSTALL_PATH --build=CURRENT_ENV --target=CROSS_COMPILER --host=CROSS_COMPILER CC=CROSS_COMPILER-gcc OTHER_PARAMETER
其中:
–prefix=YOUR_INSTALL_PATH
即,你所要把当前的库,在编译完毕之后,安装到哪里
举例:
【记录】Ubuntu下用arm-xscale-linux-gnueabi交叉编译xmlrpc
中的:
./configure --prefix=/opt/crosscompile/xmlrpc --build=i686-pc-linux-gnu --target=arm-xscale-linux-gnueabi --host=arm-xscale-linux-gnueabi CC=arm-xscale-linux-gnueabi-gcc
–build=CURRENT_ENV
目前我遇到的有两种:
- 一个是cygwin:
- –build=i686-pc-cygwin
./configure --prefix=$HOME/develop/crosstool-ng/x-tools/armxscaleexpat --build=i686-pc-cygwin --target=arm-xscale-linux --host=arm-xscale-linux CC=arm-xscale-linux-gnueabi-gcc
- –build=i686-pc-linux-gnu
./configure --prefix=/opt/crosscompile/curl --build=i686-pc-linux-gnu --target=arm-xscale-linux-gnueabi --host=arm-xscale-linux-gnueabi CC=arm-xscale-linux-gnueabi-gcc --enable-static
关于其值的来历:
(1)其中,此build的值,我之前是参考:
【记录】crosstool为xscale编译(ct-ng build)过程
中的输出:
[EXTRA] Dumping internal crosstool-NG configuration [EXTRA] Building a toolchain for: [EXTRA] build = i686-pc-cygwin [EXTRA] host = i686-pc-cygwin [EXTRA] target = arm-xscale-linux-gnueabi
而知道的。
(2)其中,此处的build的值,也是参考:
【记录】Ubuntu下用crosstool-ng为xscale建立交叉编译器arm-xscale-linux-gnueabi-gcc
->
中的输出:
[EXTRA] Dumping internal crosstool-NG configuration [EXTRA] Building a toolchain for: [EXTRA] build = i686-pc-linux-gnu [EXTRA] host = i686-pc-linux-gnu [EXTRA] target = arm-xscale-linux-gnueabi
才知道的。
–target=CROSS_COMPILER和–host=CROSS_COMPILER
对于target和host,此处,都是设置的是交叉编译器的(前缀)。
比如,如果你的交叉编译器是arm-linux,那就是:
--target=arm-linux --host=arm-linux
我此处,用crosstool-ng编译出来的for xscale的交叉编译器是:arm-xscale-linux-gnueabi
所以,此处后续编译各种库,都是用的是:
--target=arm-xscale-linux-gnueabi --host=arm-xscale-linux-gnueabi
举例:
1. 【记录】Cygwin下用arm-xscale-linux-gnueabi交叉编译log4c
中的:
./configure --prefix=$HOME/develop/crosstool-ng/x-tools/armxscalelog4c --build=i686-pc-cygwin --target=arm-xscale-linux-gnueabi --host=arm-xscale-linux-gnueabi --with-expat-prefix=$HOME/develop/crosstool-ng/x-tools/armxscaleexpat CC=arm-xscale-linux-gnueabi-gcc
2.【记录】Ubuntu下用arm-xscale-linux-gnueabi交叉编译curl(libcurl)
中的:
./configure --prefix=/opt/crosscompile/curl --build=i686-pc-linux-gnu --target=arm-xscale-linux-gnueabi --host=arm-xscale-linux-gnueabi CC=arm-xscale-linux-gnueabi-gcc --enable-static
CC=CROSS_COMPILER-gcc
1.此处的CC参数,是用于指定编译器用哪个。
一般都是对应的交叉编译器的前缀,加上gcc,比如:
arm-linux的话,加上gcc就是:arm-linux-gcc
arm-xscale-linux-gnueabi加上gcc,就是:arm-xscale-linux-gnueabi-gcc
2.而且,也多数都是可以在./configure时,就设置好对应的CC的值的。
举例:
【记录】Ubuntu下用arm-xscale-linux-gnueabi交叉编译curl(libcurl)
中的:
./configure --prefix=/opt/crosscompile/curl --build=i686-pc-linux-gnu --target=arm-xscale-linux-gnueabi --host=arm-xscale-linux-gnueabi CC=arm-xscale-linux-gnueabi-gcc --enable-static
之后,直接去make即可。
但是也有例外:
【记录】cygwin下用arm-xscale-linux-gnueabi交叉编译libcgi
中,由于configure不支持设置CC,所以需要放到后面的make才行,即:
./configure --prefix=$HOME/develop/crosstool-ng/x-tools/libcgi --build=i686-pc-cygwin --target=arm-xscale-linux-gnueabi --host=arm-xscale-linux-gnueabi make CC=arm-xscale-linux-gnueabi-gcc
OTHER_PARAMETER
1../configure可以去添加你所需要的参数
但是一般都支持的规则是:
–enable-xxx:启用(编译)某个子模块或功能(feature)
–disable-xxx:禁止(不编译)某个子模块或功能(feature)
–with-xxx:类似于–enable-xxx
–without-xxx:类似于–disable-xxx
举例:
【记录】Ubuntu下用arm-xscale-linux-gnueabi交叉编译libxml2
中,经过调试错误,发现就不需要编译python,所以,可以去添加对应的
--without-python
去禁止编译python。
所用的配置就是:
./configure --prefix=/opt/crosscompile/libxml2 --build=i686-pc-linux-gnu --target=arm-xscale-linux-gnueabi --host=arm-xscale-linux-gnueabi CC=arm-xscale-linux-gnueabi-gcc --without-python
2.添加参数之前,需要搞清楚,当前你所要去编译的库,本身支持什么参数。
正常都是可以通过:
./configure --help
去查看到,当前模块,所支持哪些参数。
举例:
【记录】Cygwin下用arm-xscale-linux-gnueabi-gcc交叉编译curl(libcurl)
中就可以通过
./configure --help
而看到当前的curl支持很多参数,其中包括:
Optional Features:
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--enable-maintainer-mode enable make rules and dependencies not useful
(and sometimes confusing) to the casual installer
--enable-debug Enable debug build options
--disable-debug Disable debug build options
--enable-optimize Enable compiler optimizations
--disable-optimize Disable compiler optimizations
--enable-warnings Enable strict compiler warnings
--disable-warnings Disable strict compiler warnings
--disable-dependency-tracking speeds up one-time build
--enable-dependency-tracking do not reject slow dependency extractors
--disable-largefile omit support for large files
--enable-shared[=PKGS] build shared libraries [default=yes]
--enable-static[=PKGS] build static libraries [default=yes]
--enable-fast-install[=PKGS]
optimize for fast installation [default=yes]
--disable-libtool-lock avoid locking (might break parallel builds)
--enable-http Enable HTTP support
--disable-http Disable HTTP support
--enable-ftp Enable FTP support
--disable-ftp Disable FTP support
--enable-file Enable FILE support
--disable-file Disable FILE support
--enable-ldap Enable LDAP support
--disable-ldap Disable LDAP support
--enable-ldaps Enable LDAPS support
--disable-ldaps Disable LDAPS support
--enable-proxy Enable proxy support
--disable-proxy Disable proxy support
--enable-dict Enable DICT support
--disable-dict Disable DICT support
--enable-telnet Enable TELNET support
--disable-telnet Disable TELNET support
--enable-tftp Enable TFTP support
--disable-tftp Disable TFTP support
--enable-manual Enable built-in manual
--disable-manual Disable built-in manual
--enable-libgcc use libgcc when linking
--enable-ipv6 Enable ipv6 (with ipv4) support
--disable-ipv6 Disable ipv6 support
--disable-thread don't look for thread-safe functions
--enable-thread look for thread-safe functions
--enable-nonblocking Enable non-blocking communications
--disable-nonblocking Disable non-blocking communications
--enable-ares=PATH Enable c-ares for name lookups
--disable-ares Disable c-ares for name lookups
--enable-verbose Enable verbose strings
--disable-verbose Disable verbose strings
--enable-sspi Enable SSPI
--disable-sspi Disable SSPI
--enable-crypto-auth Enable cryptographic authentication
--disable-crypto-auth Disable cryptographic authentication
--enable-cookies Enable cookies support
--disable-cookies Disable cookies support
--enable-hidden-symbols Hide internal symbols in library
--disable-hidden-symbols
Leave all symbols with default visibility in library
--enable-soname-bump Enable enforced SONAME bump
--disable-soname-bump Disable enforced SONAME bump
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
--with-pic try to use only PIC/non-PIC objects [default=use
both]
--with-gnu-ld assume the C compiler uses GNU ld [default=no]
--with-ldap-lib=libname Specify name of ldap lib file
--with-lber-lib=libname Specify name of lber lib file
--with-krb4-includes=DIR
Specify location of kerberos4 headers
--with-krb4-libs=DIR Specify location of kerberos4 libs
--with-krb4=DIR where to look for Kerberos4
--with-spnego=DIR Specify location of SPNEGO library fbopenssl
--with-gssapi-includes=DIR
Specify location of GSSAPI header
--with-gssapi-libs=DIR Specify location of GSSAPI libs
--with-gssapi=DIR Where to look for GSSAPI
--with-ssl=PATH Where to look for OpenSSL, PATH points to the SSL
installation (default: /usr/local/ssl); when
possible, set the PKG_CONFIG_PATH environment
variable instead of using this option
--without-ssl disable OpenSSL
--with-zlib=PATH search for zlib in PATH
--without-zlib disable use of zlib
--with-libssh2=PATH Where to look for libssh2, PATH points to the
LIBSSH2 installation (default: /usr/local/lib); when
possible, set the PKG_CONFIG_PATH environment
variable instead of using this option
--without-libssh2 disable LIBSSH2
--with-egd-socket=FILE Entropy Gathering Daemon socket pathname
--with-random=FILE read randomness from FILE (default=/dev/urandom)
--with-gnutls=PATH where to look for GnuTLS, PATH points to the
installation root (default: /usr/local/)
--without-gnutls disable GnuTLS detection
--with-nss=PATH where to look for NSS, PATH points to the
installation root (default: /usr/local/)
--without-nss disable NSS detection
--with-ca-bundle=FILE File name to use as CA bundle
--without-ca-bundle Don't use a default CA bundle
--with-ca-path=DIRECTORY
Directory to use as CA path
--without-ca-path Don't use a default CA path
--with-libidn=PATH Enable libidn usage
--without-libidn Disable libidn usage而对应的,后来经过参考别人的配置,加上了这个:
--enable-static
去实现对应的,支持静态库的效果。
所用配置就是:
./configure --prefix=$HOME/develop/crosstool-ng/x-tools/armxscalecurl --build=i686-pc-cygwin --host=arm-linux CC=arm-xscale-linux-gnueabi-gcc --enable-static
转载请注明:在路上 » 【整理】交叉编译心得和注意事项