【发布时间】:2022-01-12 00:29:39
【问题描述】:
TL;DR : 我的二进制文件无法加载 /lib64/libm.so,我不知道为什么。看着精灵们模糊的小标题,唯一看起来不兼容的就是 ABI 编号。
长格式: 未找到声称该二进制文件的试运行炸弹 - 但它存在。
[aardvark@aardvark-burrow ~/project-src] ldd /data/users/aardvark/project-src/buck-out/gen/arvr/libraries/perception/calib/metrics/metrics_test
/data/users/aardvark/project-src/buck-out/gen/arvr/libraries/perception/calib/metrics/metrics_test: error while loading shared libraries: /lib64/libc.so: invalid ELF header
cat-ing /lib64/libm.so 揭示:
/* GNU ld script
*/
OUTPUT_FORMAT(elf64-x86-64)
GROUP ( /lib64/libm.so.6 AS_NEEDED ( /usr/lib64/libmvec_nonshared.a /lib64/libmvec.so.1 ) )
按照最后的链接,我得到了一个 ELF 文件。我阅读了标题和需要它的二进制文件,将它们填充到文本文件中,然后区分它们:
[aardvark@aardvark-burrow ~/project-src] diff ~/logs/elf.ray_transport_test.txt ~/logs/elf.libm.txt
--- /home/aardvark/logs/elf.ray_transport_test.txt 2021-12-06 11:34:40.843179878 -0800
+++ /home/aardvark/logs/elf.libm.txt 2021-12-06 11:33:50.264101198 -0800
@@ -1,20 +1,20 @@
ELF Header:
- Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
+ Magic: 7f 45 4c 46 02 01 01 03 00 00 00 00 00 00 00 00
Class: ELF64
Data: 2's complement, little endian
Version: 1 (current)
- OS/ABI: UNIX - System V
+ OS/ABI: UNIX - GNU
ABI Version: 0
Type: DYN (Shared object file)
Machine: Advanced Micro Devices X86-64
Version: 0x1
- Entry point address: 0x13220
+ Entry point address: 0xc520
Start of program headers: 64 (bytes into file)
- Start of section headers: 15936800 (bytes into file)
+ Start of section headers: 2189472 (bytes into file)
Flags: 0x0
Size of this header: 64 (bytes)
Size of program headers: 56 (bytes)
Number of program headers: 9
Size of section headers: 64 (bytes)
- Number of section headers: 40
- Section header string table index: 39
+ Number of section headers: 37
+ Section header string table index: 36
我的 VM id 本身是通过 uname -a 获得的:
Linux aardvark-burrow.zoo.com 5.6.13-0_fbk17_hardened_5815_gc01d8dbd2635 #1 SMP Fri Jul 9 10:54:31 PDT 2021 x86_64 x86_64 x86_64 GNU/Linux
这就是我的可执行文件失败的原因吗?
还有什么问题?
【问题讨论】:
-
你是在为赫德建造吗?我的库说 System V。
-
二进制文件将在 x86_64 Android 版本上运行,该版本运行在我上面“未命名”的机器上托管的模拟器上。同一台 VM 是构建机器。
标签: c linux linker cross-platform elf