Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 根据$LD\u库路径和架构选择库_Linux_Architecture_Ldd - Fatal编程技术网

Linux 根据$LD\u库路径和架构选择库

Linux 根据$LD\u库路径和架构选择库,linux,architecture,ldd,Linux,Architecture,Ldd,为了演示,我制作了两个文件夹,其中包含两个版本的libgccs.so.1 我根据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), stri

为了演示,我制作了两个文件夹,其中包含两个版本的libgccs.so.1 我根据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_.so.1?
我知道这是一个架构问题,但a/libgcc_.so.1如何被视为无效,我如何手动测试它?

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

Ok,但如何确定库是否符合当前的体系结构?我可以得到ELF的18-19字节,但我不知道如何确定该代码是否符合我的实际架构。做[$(readelf-h | grep$(Machine:)=*$(uname-i)*]]是安全的吗?在更高的层次上,您试图实现的实际目标是什么?我在不同的平台上共享了包含不同体系结构的不同库的文件夹。我的实际LD_LIBRARY_路径包括所有这些。我想根据体系结构减少它,只使用有用的文件夹,而不使用任何命名约定。然后我认为应该使文件夹命名为与
uname-m
(例如x86_64)的输出相同的文件夹。然后,当然,扫描readelf或
file(1)
或其他任何文件的输出,并进行字符串匹配。这似乎比命名惯例更糟糕,但这只是我的观点。