日期:2014-05-16  浏览次数:20919 次

could not read symbols: File in wrong format
我在使用arm-linux-gcc编译程序的时候出现以下错误提示:
arm-linux-gcc -Wall -I../../../include -I../../../../include -I../../../../include/linux -c ../../readwrite.c
arm-linux-gcc -o readwrite -L../../../../lib/linux/ixp4x5 \
  readwrite.o -lrfid -lrfidtx -lcpl -lpthread -lrt -lstdc++
../../../../lib/linux/ixp4x5/librfid.so: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
make: *** [readwrite] Error 1

librfid.so文件是厂商提供的,在ixp425文件见下存在,我也拷贝此文件到/usr/lib中,并运行了ldconfig命令,问什么会出现这错误,请高手帮帮忙,谢谢~~

------解决方案--------------------
file librfid.so,看看此文件的格式。
你的工具链跟librfid.so的格式不区配,重新用你的工具编译下它吧。
------解决方案--------------------
文件格式可能跟你不是 arm 下编译的。
用file 命令查看一下。

如果是厂商提供,那需要他们提供你所需要的平台下的编译文件。
------解决方案--------------------
跟eabi有关吗?你的工具链支持eabi吗?
不行就要厂商用你的工具链编译库
要么你就用厂商的工具链试试

------解决方案--------------------
librfid.so: ELF 32-bit MSB shared object, ARM, version 1 (SYSV), not stripped 
-------------
lz把你的工具链编译出的库信息也拿来比较一下
------解决方案--------------------
linux command:
which gcc
gcc -v
------解决方案--------------------
gcc-4.0以上可以支持ARM的EABI,你也可以这样:
arm-linux-gcc -o hello hello.c
arm-linux-readelf -h hello
这一行会显示是否使用了EABI,
Flags: 0x202, has entry point, GNU EABI, software FP
上面这一行表示不使用EABI(能和其它编译器链接的EABI表示为Version5 EABI),软浮点

你也可以使用上面的命令测试一下那个librfid.so的输出,只有当格式完全一致时才能连接。
------解决方案--------------------
探讨

gcc-4.0以上可以支持ARM的EABI,你也可以这样:
arm-linux-gcc -o hello hello.c
arm-linux-readelf -h hello
这一行会显示是否使用了EABI,
Flags: 0x202, has entry point, GNU EABI, software FP
上面这一行表示不……