could not read symbols: File format not recognized

arm-linux-gnueabi-readelf工具解決問題

編譯一個32位平臺的內核時,出現以下錯誤提示:linux

libschw.a: could not read symbols: File format not recognized工具

因而進入相應的目錄發現,libschw.a這個文件是存在的,可是爲啥編譯不過呢,一樣的編譯在另一個64位平臺卻沒有這個報錯。this

思路:是否與32位64位平臺有關?

使用readelf來查看一下這個庫,

$ arm-linux-gnueabi-readelf -h modules/aw_schw/libschw
File: modules/aw_schw/libschw(aw_schw_lib.o)
ELF Header:
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
  Class:                             ELF64
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              REL (Relocatable file)
  Machine:                           <unknown>: 0xb7
  Version:                           0x1
  Entry point address:               0x0
  Start of program headers:          0 (bytes into file)
  Start of section headers:          161192 (bytes into file)
  Flags:                             0x0
  Size of this header:               64 (bytes)
  Size of program headers:           0 (bytes)
  Number of program headers:         0
  Size of section headers:           64 (bytes)
  Number of section headers:         29
  Section header string table index: 24
果真,這個庫顯示是64位的,爲了兼容32位的,只能修改Makefile,判斷到32位時,使用32位的庫。
+ifeq ($(LICHEE_ARCH),arm64)
        cp libschw libschw.a
+else
+       cp libschw32 libschw.a
+endif
從新弄一份新32位的libschw32庫後,從新編譯,問題解決。
相關文章
相關標籤/搜索