最近在移植一些工具,需要確認編譯出來的程式跟函式庫是不是板子可跑的,或是碰到程式不能跑時,該怎樣確認。

這時就可以用簡易的 file 指令來驗證:

$ file spawn-fcgi
spawn-fcgi: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.27, stripped

$ file lib/libjpeg.so.62
lib/libjpeg.so.62: ELF 32-bit LSB shared object, ARM, version 1 (SYSV), dynamically linked, stripped

驗證所需函式庫(有些 shared object 還會再 link 其他 shared objects):

$ armv6-linux-gnueabi-readelf -a bin/spawn-fcgi | grep Shared
0x00000001 (NEEDED) Shared library: [libgcc_s.so.1]
0x00000001 (NEEDED) Shared library: [libc.so.6]

$ armv6-linux-gnueabi-readelf -a lib/libjpeg.so.62 | grep Shared
Type: DYN (Shared object file)
0x00000001 (NEEDED) Shared library: [libgcc_s.so.1]
0x00000001 (NEEDED) Shared library: [libc.so.6]

有時雖然已經是 ARM 架構,但丟上去就是不能跑,顯示 format 錯誤的訊息,這時有可能是板子雖然是 ARM 架構,但是 CPU 指令集不支援,例如在 ARMv6 的板子執行 ARMv7 編譯出來的程式,此時就需要判斷程式或函式庫是用哪個 compiler 編的:

$ armv6-linux-gnueabi-readelf -a modules/fuse.ko | grep -i CPU
Tag_CPU_name: "6"
Tag_CPU_arch: v6

 


, , , , , ,

changyy 發表在 痞客邦 PIXNET 留言(0) 人氣()