Chinaunix首页 | 论坛 | 博客
  • 博客访问: 48920
  • 博文数量: 14
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 12
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-30 00:09
文章分类
文章存档

2014年(4)

2013年(10)

我的朋友

分类: LINUX

2013-09-06 13:19:48

让自己的程序动态连接 动态编译busybox
    一直以来自己的程序都是静态编译的,以前编译的时候都是加上-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


创建于: 2010-03-09 14:46:18,修改于: 2010-03-09 15:08:55,已浏览85次,有评论0条
阅读(1071) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~