0

为了演示,我用 2 个版本的 libgcc_s.so.1 制作了 2 个文件夹,我根据 ldd 寻找库选择:

> file {A,B}/libgcc_s.so.1
A/libgcc_s.so.1: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), stripped
B/libgcc_s.so.1: ELF 64-bit LSB shared object, AMD x86-64, version 1 (SYSV), stripped

> LD_LIBRARY_PATH=A:B ldd MyProgram | grep libgcc_s.so.1
libgcc_s.so.1 => B/libgcc_s.so.1

为什么 MyProgram 不使用 A/libgcc_s.so.1 ?我知道这是一个架构问题,但是 A/libgcc_s.so.1 如何被认为是无效的,我该如何手动测试它?

4

1 回答 1

0

ELF 头的第三个字段是“machine”,对于 amd64 (x86_64) 的值为 62,对于 i386 (80386) 的值为 3。加载器当然会检查这个字段以确定它是否可以使用给定的库,如果不能,它将继续到其搜索列表中的下一个路径。

于 2014-09-22T12:43:14.810 回答