|
编译基于uclibc的busybox
以前网上文章的介绍都是基于uclibc-0.9.16之前的版本,而编译busybox也是相应的选择静态链接,
但是uclibc的后续版本提供了相应的toolchain,不像0.9.16之前的版本相应的生成gcc,可以直接用来编写基于uclibc的程序。
我的做法是到www.uclibc.org
下载uclibc的toolchain(gcc-3.3.x),解压缩后,默认的target是i386
中间需要的包包括
binutils-2.14.90.0.6.tar.bz2
ccache-2.3.tar.gz
gcc-3.3.4.tar.bz2
kernel-header-2.4.25.tar.bz2
uClibc-snapshot.tar.bz2
make的过程中会自动下载上述包到/gcc-3.3.x/source/dl,所以也可手动建立dl文件夹,并下载这些包到该文件夹。
make完成之后生成toolchain_i386和toolchain_build_i386文件夹,在/toolchain_i386/bin中就是
交叉编译需要的i386-linux-gcc等工具,/toolchain_i386/lib为uclibc库。
到www.busybox.net下载busybox-1.00,解压
export PATH=/home/xxx/gcc-3.3.x/toolchain_i386/binPATH
make
make dep
make CROSS=i386-linux-
make install
编译完busybox后,不能用系统ldd查看相应程序的动态链接情况,
cd /home/xxx/gcc-3.3.x/toolchain_build_i386/uClibc/utils
make ldd.host
./ldd.host /busybox-1.00/_install/bin/busybox
这时显示的busybox就是链接的uclibc库了。
我的问题是这里生成的uclibc的toolchain和uclibc的库都是用host上gcc和glibc生成的,也就是说/toolchain_i386/bin/i386-linux-gcc和/toolchain_i386/lib都是通过gcc和glibc生成的,之后再用i386-linux-gcc生成基于uclibc的程序,如果要移植到target上,是把这里的基于host的gcc和glibc编译的uclibc库移植就可以吗,
还是说在target上运行的uclibc库需要再用这里的i386-linux-gcc交叉编译uclibc.0.9.26.tar.gz源文件,重新生成uclibc库以后才能移植?
(在uclibc-0.9.26的make过程中,export PATH=/home/xxx/gcc-3.3.x/toolchain_i386/binPATH
make CROSS=i386-linux-,这样利用i386-linux-gcc生成的uclibc库与gcc和glibc编译的uclibc库相比较,发现前者相应的文件要小一些。) |
|