打印
[嵌入式linux]

笔记090316-研究/lib目录

[复制链接]
2424|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
masashinakayama|  楼主 | 2009-3-17 22:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
3月16日
研究/lib目录

首先,如果加上“-static”后缀,静态编译出来的文件大小从8KB变为500KB。虽可以执行,但这不是今日研究的目的。

清光/lib目录下所有文件的情况下,用动态编译出的文件在ST2410上跑不起来,
# ./a.out
-/bin/sh: ./a.out: not found

把linux主机上/usr/local/arm/3.4.5/arm-linux/lib下的所有库文件拷到ST2410的/lib下,文件可以执行。这说明此路可行,但需要精确定位到底需要什么库文件。

主机的ldd文件不适用于交叉编译系统,arm-linux-ldd也没找到,因为整套工具是crosstool自动生成的,不过还是找到了arm-linux-readelf工具,
[root@localhost key]# arm-linux-readelf -d a.out | grep "Share"
 0x00000001 (NEEDED)                     Shared library: [libc.so.6]
原来需要libc.so.6,但后来发现这是个符号链接文件
[root@localhost lib]# ll libc.so.6
lrwxrwxrwx  1 515 506 13 Nov 27 20:58 libc.so.6 -> libc-2.3.6.so
符号链接文件不能简单cp,需要用cp –d
这样,把libc.so.6和libc-2.4.6.so两个文件拷过去,发现还是不能运行可执行文件,似乎还少东西。

外事问google,内事问baidu,查了半天,查出可能还少符号文件ld-linux.so.2,把ld-linux.so.2和ld-2.3.6.so拷过去,一切OK了。这两个没头没脑的文件,不知道怎么知道会需要的。

用ldd找i386文件看了看,人家能显示出来,太崩溃了。
[root@localhost lib]# ldd /smbshare/korea/p112/a.out
        libc.so.6 => /lib/tls/libc.so.6 (0x0059e000)
        /lib/ld-linux.so.2 (0x00581000)

整理这篇笔记的时候,想到会不会是自己arm-linux-readelf不会用,其实已经显示了需要的ld-linux.so.2了呢?
[root@localhost key]# arm-linux-readelf -a a.out | grep "ld"
      [Requesting program interpreter: /lib/ld-linux.so.2]
第二次崩溃!

接着成热打铁把三个libz文件拷过去,flash_eraseall可以用了。
arm-linux-strip a.out瘦身后文件变更小——3KB。

相关帖子

沙发
有风| | 2009-3-17 22:50 | 只看该作者

我的ST2410还在柜子里面发着霉,帮顶一下~~

使用特权

评论回复
板凳
masashinakayama|  楼主 | 2009-3-17 22:57 | 只看该作者

浪费了多可惜

这个板子我问西北工业大学一个学生买的二手的,但是是全新的,1000块
没出大刀,因为自己学生时代也是这么省吃俭用一路钻研过来的

使用特权

评论回复
地板
sinanjj| | 2009-3-19 22:05 | 只看该作者

我有动态变静态的思路



http://directory.fsf.org/project/ELF/

LZ看看这个

使用特权

评论回复
5
uusky| | 2009-3-23 13:38 | 只看该作者

顶!

楼主,好强悍!哈哈……

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

317

主题

1957

帖子

4

粉丝