【问题标题】:Objdump doesn't recognize the architecture of a shared libraryObjdump 无法识别共享库的体系结构
【发布时间】:2016-09-28 11:42:30
【问题描述】:

我在 Ubuntu 14.04 上为 ARM 平台构建了一个共享库。该文件已成功编译和构建。我可以使用 nm 命令检查导出的符号,但是当我检查 .so 文件头时,我得到了架构未知的信息。

这个库是否构建正确,为什么库架构未知

objdump -f libMyLib.so 

libMyLib.so:  file format elf32-little
architecture: UNKNOWN!, flags 0x00000150:
HAS_SYMS, DYNAMIC, D_PAGED
start address 0x000033a0

【问题讨论】:

  • 请参阅objdump -i - objdump 的特定构建可以理解 objdump 的特定构建被配置为理解的任何内容。如果您正在交叉编译,该工具链可能还提供其自己的适当配置的 objdump 二进制文件。
  • 尝试使用 binutils-arm-linux-gnueabi 包中的arm-linux-gnueabi-objdump。我猜你有一个 Linux 共享库,并且正在使用 Ubuntu 交叉编译器。如果没有,crosstool-ng 具有 objdump 与您的编译器使用的任何前缀,并且大多数人从该项目中进行 ARM 交叉。更直接地说,您的objdump 只了解 ELF 的 PC 扩展。

标签: arm shared-libraries objdump


【解决方案1】:

您需要使用目标系统 (ARM) 工具链提供的 objdump 二进制文件,而不是来自主机系统 (x86_64)。

例如:我已经设置了一个针对 openwrt mips 的主机系统 Linux x86_64,我的工具链文件夹有一些文件:

mips-openwrt-linux-gnu-ar
mips-openwrt-linux-gnu-as
mips-openwrt-linux-gnu-gcc
mips-openwrt-linux-gnu-ld
mips-openwrt-linux-gnu-objdump
mips-openwrt-linux-gnu-nm

这些是为 openwrt mips 系统操作程序的工具,所以我需要调用 ./mips-openwrt-linux-gnu-objdump -f <bin file> 来读取并获取编译文件的正确输出,而不是只调用 objdump。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 2023-03-30
    • 2014-02-24
    相关资源
    最近更新 更多