我们在编译 busybox源码时,选择的是动态编译,所以,制作生成的 根文件系统中/bin或 /sbin目录下软件运行时会调用到一些库文件的。库文件就是交叉编译器的库文件。
前面我们编译 busybox源码时,选择动态编译,那么这时就需要调用到动态库文件。所以,根文件系统中需要存放动态库文件。当然你也可以编译成静态的,但是静态的可执行文件会很大。
本文在之前编译生成的 根文件系统的基础上继续进行学习。
打开 之前编译生成的根文件系统,我这里在 ubuntu系统下/linux/nfs_File/rootfs,进入 rootfs根目录下,在 rootfs 文件夹下创建一个为 “lib” 的文件夹,命令如下:
wangtian@wangtian-virtual-machine:~/linux/nfs_File/rootfs$ mkdir lib
我这里 交叉编译器的安装路径为:
usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/
(1) 拷贝 /gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/lib/目录下库文件
wangtian@wangtian-virtual-machine:~$ cd /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/lib/
此目录下有很多的*so*(*是通配符)和.a 文件,这些就是库文件,将此目录下所有的*so*和.a 文件都拷贝到 rootfs/lib 目录中,将该文件夹下的库文件都拷贝到 rootfs/lib目录下:
wangtian@wangtian-virtual-machine:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/lib$ cp *so* *.a /home/wangtian/linux/nfs_File/rootfs/lib/ -d
后面的“-d”表示拷贝符号链接,这里有个比较特殊的库文件:ld-linux-armhf.so.3,此库文件也是个符号链接,相当于 Windows 下的快捷方式。会链接到库 ld-2.19-2014.08-1-git.so 上,通过查看可知:
可以看出,ld-linux-armhf.so.3 后面有个“->”,表示其是个软连接文件,链接到文件 ld-2.19-2014.08-1-git.so,因为其是一个“快捷方式”,所以其大小只有 24B。但是,ld-linuxarmhf.so.3 不能作为符号链接,否则的话在根文件系统中执行程序无法执行!
需要我们重新复制一次 ld-linuxarmhf.so.3文件,只是不复制软链接即可。
wangtian@wangtian-virtual-machine:~/linux/nfs_File/rootfs/lib$ rm ld-linux-armhf.so.3
cp ld-linux-armhf.so.3 /home/wangtian/linux/nfs_File/rootfs/lib/
(2) 拷贝 /gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib/目录下库文件
/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib
cp *so* *.a /home/zuozhongkai/linux/nfs/rootfs/lib/ -d
wangtian@wangtian-virtual-machine:~/linux/nfs_File/rootfs/usr$ mkdir lib
进入如下目录下:
cd /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/lib
将此目录下的 so 和.a 库文件都拷贝到 rootfs/usr/lib 目录中,命令如下:
wangtian@wangtian-virtual-machine:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/lib$ cp *so* *.a /home/wangtian/linux/nfs_File/rootfs/usr/lib/ -d