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。
|