我在做某事时注意到了一些事情find /bin -exec file {} \;
:
该file
命令报告的某些条目中/bin
有shared objects
,而其他的executables
。例如,
/ bin / ntfsck:
ELF 64位LSB共享对象,x86-64,版本1(SYSV),
动态链接(使用共享库),用于GNU / Linux 2.6.24,BuildID [sha1] = 312d93fd0d8653e7236a61db2e67b93c63225a00,已剥离
相同的报告 gawk
/ usr / bin / gawk:
ELF 64位LSB共享对象,x86-64,版本1(SYSV),
动态链接(使用共享库),用于GNU / Linux 2.6.24,
BuildID [sha1] = 76bb13aac7e212164bd6e0d7b8a5d92db44543c9,已剥离
与此相反file
的/bin/echo
是:
/ bin / echo:
ELF 64位LSB可执行文件,x86-64,版本1(SYSV),
动态链接(使用共享库),用于GNU / Linux 2.6.24,
BuildID [sha1] = 193e75fc13e9c4599e772b8d79125a5934cf601c,已剥离
本质上,我想知道executable
文件和shared object
文件之间的区别。
除了已编译的可执行文件可能链接到共享对象而不链接到可执行文件这一事实外,没有任何区别。
通常,有两种方法可编译1可执行文件:
使用这些方法中的每一个都有优点/缺点,但这不是问题的重点。
/bin/ntfsck
并且/usr/bin/gawk
是共享对象:这意味着可执行文件可以被编译,然后链接到它们以使用其功能;/bin/echo
是可执行文件:这意味着可能不会编译可执行文件,然后将其链接以使用其功能;因此/bin/ntfsck
,/usr/bin/gawk
它们都是技术上经过编译的库(或链接程序角度的对象),但是,正如人们可能已经预见到的那样,没有什么可以阻止共享对象作为可执行文件运行。
另外,请注意file
报告(针对每个报告):
动态链接(使用共享库)
这意味着它们每个都动态链接到(也可能使用)其他共享对象。
1.“编译”旨在获得更广泛的接受,包括预处理,编译和链接。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句