使用busybox制作文件系统, 编译器: arm-linux-gcc 4.3.2, busybox 1.13.3, 动态编译。怎么知道都需要哪些库?有文章说用:
arm-linux-readelf -d busybox | grep Shared来查看,我输入这个命令,显示:
[root@Lanry bin]# arm-linux-readelf -d busybox |grep Shared
0x00000001 (NEEDED) Shared library: [libcrypt.so.1]
0x00000001 (NEEDED) Shared library: [libc.so.6]
有点不大象啊。 一是怎么可能只用到两个库, 二是 libcrypt是需要认证的程序才用到,我配置busybox时没有选到什么需要认证的啊。???????????
交叉应用程序的开发需要用到交叉编译的链接库,交叉编译的链接库是在交叉工具链的lib目录下;我们在移植应用程序到我们的目标板的时候,需要把交叉编译的链接库也一起移植到目标板上,这里我们用到的交叉工具链的路径是/usr/local/arm/3.4.1/,所以链接库的目录是/usr/local/arm/3.4.1/lib(本来跟目标板相关的目录是/usr/local/arm/3.4.1/arm-linux, 因此要拷贝的链接库应该在/usr/local/arm/3.4.1/arm-linux/lib下,但是此目录的很多链接都是链接到/usr/local/arm/3.4.1/lib目录下的库文件,所以我们从/usr/local/arm/3.4.1/lib目录拷贝库),此目录下有四种类型的文件。
实际的共享链接库
如:libc-2.3.2.so
主修订版本的符合链接
如:libc.so.2
与版本无关的符合链接(链接到主修订版本的符合链接)
如:libc.so
静态链接库包文件
如:libc.a
以上四种类型的文件,我们只需要两种:实际的共享链接库;主修订版本的符合链接,还有动态连接器及其符号链接。
#进入链接库目录
cd /usr/local/arm/3.4.1/lib
cp $file-*.so /home/rootfs/lib
cp -d $file.so.[*0-9]/jhome /rootfs/lib
cp -d ld*.so*/home /rootfs/lib
#第一个cp命令会复制实际的共享库
#第二个cp命令会复制符合链接本身
#第三个cp命令会复制动态连接器及其符合链接
在做文件系统的时候需要加载器和动态库具体操作:
cd /lib
cp *.so* /home/rootfs/lib