Jac*_*ern 6 c++ linux executable shared-libraries
澄清一下,这是一个关于二进制 Linux 可执行文件的问题,而不是脚本,脚本也可以是可执行的,而且通常缺少扩展名。
根据我的经验,大多数 Linux 二进制可执行文件都缺少文件扩展名;例如,Linux 系统上目录中的大多数文件都/bin缺少扩展名。
另一方面,该/lib目录中的大多数文件都具有.so文件扩展名,并且还具有可执行权限。尝试直接执行.so文件通常会导致段错误或某些错误,这是有道理的,因为共享库通常旨在动态链接。但据我了解,如果.so文件有main()入口点,那么您可以将其作为可执行文件运行,就像正常的可执行文件一样(即没有扩展名的文件)。
我的问题:
.so共享库(扩展名)和可执行文件(扩展名)有什么区别[none]?仅仅是是否main()定义了入口点吗?.so在C++中,将代码编译成共享库(扩展)和将代码编译成Linux可执行文件(扩展)有什么区别(即传递给编译器的标志)[none]。编辑:这个问题讨论了如何使用 gcc 命令行构建 .so 文件,但没有确定构建 .so 与普通可执行文件之间的差异。
main()。它还包含与位置无关的代码,对于可执行文件可能是也可能不是。如果您确实将函数放入main()库中,则仍然需要将其与普通目标文件(不 main()包含函数)链接。-fpic或-fPIC生成适合在共享库中使用的位置无关代码(PIC )。没有什么可以阻止您创建名为myexe.so虽然的可执行文件,但它不能用作共享库。