C 为什么ld、nm、objdump报告';无符号';在此共享对象中,符号何时出现?

C 为什么ld、nm、objdump报告';无符号';在此共享对象中,符号何时出现?,c,gcc,linker,shared-libraries,C,Gcc,Linker,Shared Libraries,我有一个未记录的共享对象,我想链接它 我已经编写了一个包含所需函数的部分头文件,其中包含从Ghidra的反向工程中推断出来的签名 gcc在链接时失败:对我使用的每个函数的“function\u name”的未定义引用 nm-D libXSAL.so nm: libXSAL.so: No symbols libXSAL.so: file format elf32-little SYMBOL TABLE: no symbols objdump-t libXSAL.so nm: libX

我有一个未记录的共享对象,我想链接它

我已经编写了一个包含所需函数的部分头文件,其中包含从Ghidra的反向工程中推断出来的签名

gcc
在链接时失败:
对我使用的每个函数的“function\u name”的未定义引用

nm-D libXSAL.so

nm: libXSAL.so: No symbols
libXSAL.so:     file format elf32-little

SYMBOL TABLE:
no symbols
objdump-t libXSAL.so

nm: libXSAL.so: No symbols
libXSAL.so:     file format elf32-little

SYMBOL TABLE:
no symbols
然而,Ghidra发现了符号表中给出的函数名称,通过手动选择hexdump,我也可以看到它们

就我所见,名称混乱既不在库中,也不在我自己的代码中;这个库似乎是C,我的代码也是

我的目标是能够链接到此库


为什么有些工具看到符号,而其他工具看不到符号?

此共享对象没有节头:

libXSAL.so: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), invalid note alignment 0x1, dynamically linked, no section header
根据ELF标准:

链接期间使用的文件必须具有节头表;其他对象文件可能有,也可能没有

您可能能够重建节标题表,但祝您好运

这是故意做的(大概是使用
strip
),因此您无法链接到该文件

以下是执行此操作的
strip
选项:

  -s --strip-all                   Remove all symbol and relocation information

它可能已被剥离,因此您无法链接到它。试试
objdump-d
,看看你是否只得到一堆乱码。@S.S.Anne
objdump-d
在第一行之外没有输出。你是为x86还是ARM编译的?ARM Little endian。