一直以来自己的程序都是静态编译的,以前编译的时候都是加上-static,这样小的文件还行,大了体积就是动态编译的几倍。前些天移植了ADC驱动,就想着要在屏上做个音频分析,也可以是频率分析仪,频谱显示的lcd上,gui想到了用minigui,编译好了拿来板子上才发现需要动态链接库,上网查了些资料发现busybox需要动态编译,并拷入必要的链接文件。
busybox动态编译如下配置
1. 在BusyBox-1.10.1的配置中将如下选项勾上:
│ │[ ] Build BusyBox as a position independent executable │ │
│ │[ ] Force NOMMU build │ │
│ │[*] Build shared libbusybox │ │
│ │[ ] Produce a binary for each applet, linked against libbusybox │ │
│ │[ ] Produce additional busybox binary linked against libbusybox │ │
2.去掉如下选项
│ Networking Utilities ---> │ │
│[ ] ip tunnel │ │
否则可能会出ip.c什么的错误!
然后是拷贝交叉编译库
我的是在/opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/libc/armv4t/lib这个目录下,网上看到一个同志的脚本,根据自己的修改了一下
vi cp.sh
#内容如下:
for file in libc libcrypt libdl libm libpthread libresolv libutil
do
cp $file-*.so /root/filesystem/root_2.6.25.8/bin
cp -d $file.so.[*0-9] /root/filesystem/root_2.6.25.8/bin
done
cp -d ld*.so* /root/filesystem/root_2.6.25.8/bin
cp -a libgcc_s.so.* /root/filesystem/root_2.6.25.8/bin
保存后用source cp.sh即可完成拷贝
添加自己的动态库
在etc目录下建立一个ld.so.conf配置文件,将动态库的路径加入其中,如usr/local/lib,保存.然事在PC上对文件系统根目录运行配置命令:如根目录为netfs,则如下:
ldconfig –r root_2.6.25.8 之后在etc下生成一个ld.so.cache的文件,这样启动后即可加载动态编译的文件系统了,自己的编译的程序也不用静态编译了.
最后用mkyaffs2image root_2.6.25.8/ rott.bin完成文件系统的制作,其中省略了需要添加的文件的添加,此处上传基础文件系统以备用
|
文件: |
root-base.tar.gz |
大小: |
2003KB |
下载: |
下载 | |
下面说一下如何将arm-linux-gcc下的 ldd(查看动态库依赖)命令修改了可以在板子上用
在/opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/libc/armv4t/usr/bin宝贝ldd,并打开修改
vim ldd
把第一行修改成
#!/bin/sh
拷贝到板子上的/usr/bin下就可以用了,如下
[root@EmbedSky /tmp]# ldd a.out libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x40026000) libc.so.6 => /lib/libc.so.6 (0x4003a000) /lib/ld-linux.so.3 (0x40000000) [root@EmbedSky /tmp]# ./a.out hello share
|