|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
! ?$ j8 k: u" Q! I) {1 ] PARM-linux-gnueabi-readelf工具解决问题% O. s2 ]) F4 {1 p7 W! @+ |
编译一个32位平台的内核时,出现如下错误提示:0 l b: \1 }8 x' H
" H- S4 M& o& Y& a& nlibschw.a: could not read symbols: File format not recognized3 c( d2 p! s8 L! B' F
5 S$ v- v* s8 p# z4 E; ~6 s
于是进入相应的目录发现,libschw.a这个文件是存在的,但是为啥编译不过呢,同样的编译在另外一个64位平台却没有这个报错。2 z4 y' ]& o4 T" [7 T/ F
, C! d5 L, B: s7 W) R/ P思路:是否与32位64位平台有关?
5 E' v: G! }6 Z2 s3 S使用readelf来查看一下这个库,7 J2 c7 y# K# Q& W. h9 N
$ arm-linux-gnueabi-readelf -h modules/aw_schw/libschw" y: r" c0 m. {
File: modules/aw_schw/libschw(aw_schw_lib.o)
, I! U+ o# e% s$ U: T }' iELF Header:
, @0 E' G% Z/ K( H Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
6 ^& y, }$ \2 K2 d Class: ELF64
- F+ |- A" C4 O, Z- l7 b$ w( | Data: 2's complement, little endian! \4 P- }6 \5 [/ E/ N5 Z
Version: 1 (current)
+ z4 P! P" R0 Z6 ?" e1 O- | OS/ABI: UNIX - System V
) g. p( }' B% Q0 c* ~& \ ABI Version: 0
( b2 L4 ]6 T7 }3 j Type: REL (Relocatable file)) N7 S9 G! S# ?0 x
Machine: <unknown>: 0xb7- }; U; Y6 h4 ?6 ~/ q% E4 C
Version: 0x19 K4 o0 m- X2 Z! b( J0 e
Entry point address: 0x05 a# A+ }, e. R" l; t, `
Start of program headers: 0 (bytes into file)
% B; U9 s: f) Y' G0 p2 U* n Start of section headers: 161192 (bytes into file)' ]; x" @/ H7 B1 j5 y& J/ x
Flags: 0x04 i/ u: w) z/ O3 }
Size of this header: 64 (bytes)4 `/ G+ a2 Q8 e( K3 @+ P
Size of program headers: 0 (bytes)
0 y. Z% v; O, E) ?9 F Number of program headers: 0
}/ S; P! Z2 S Size of section headers: 64 (bytes). C' O; G# r+ b
Number of section headers: 29. [* Z+ F0 u7 F: F
Section header string table index: 24% d* ~# U; {6 s! ?8 G7 Y8 H
果然,这个库显示是64位的,为了兼容32位的,只能修改Makefile,判断到32位时,使用32位的库。7 N8 E. |9 t ?4 t% g
+ifeq ($(LICHEE_ARCH),arm64)! ^9 m( `' J: n3 n- _
cp libschw libschw.a
0 D4 b- x7 h; B- q) W+else
9 \. P9 ]7 |+ u3 G, U, {" J+ cp libschw32 libschw.a
5 u: M) x; X3 M9 y6 g" ]5 Z+endif& S2 {, a- F, C/ ^
重新弄一份新32位的libschw32库后,重新编译,问题解决。" g+ ^( p8 R4 S7 V
|
|