明确地说,这是关于二进制Linux可执行文件而不是脚本的问题,脚本也可以是可执行文件,并且通常缺少扩展名。
以我的经验,大多数Linux二进制可执行文件都缺少文件扩展名。例如/bin
,Linux系统上目录中的大多数文件都没有扩展名。
另一方面,目录中的大多数文件/lib
都具有.so
其文件扩展名,并且还具有可执行权限。.so
直接尝试执行文件通常会导致段错误或某些错误,这是有道理的,因为共享库通常旨在动态链接。但是据我了解,如果.so
文件具有main()
入口点,则可以像执行普通可执行文件(即不带扩展名的文件)一样将其作为可执行文件运行。
我的问题:
.so
扩展名)和可执行文件([none]
扩展名)有什么区别?是否只是main()
定义入口点?.so
扩展名)和将代码编译成Linux可执行文件([none]
扩展名)有什么区别(即,传递给编译器的标志)。编辑:此问题讨论了如何使用gcc命令行构建.so文件,但没有确定构建.so与普通可执行文件之间的区别。
main()
功能。它还包含与位置无关的代码,对于可执行文件可能是,也可能不是。如果你不把一个main()
函数库,你还需要将它与一个链接正常目标文件(含无 main()
功能)。-fpic
或-fPIC
编译适用于共享库的位置无关代码(PIC)来编译代码。myexe.so
虽然没有什么可以阻止您创建一个称为的可执行文件,但是它不能用作共享库。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句