共享库(.so)与没有扩展名的Linux可执行文件之间的区别?

问题描述 投票:1回答:1

要澄清,这是关于二进制Linux可执行文件而不是脚本的问题,脚本也可以是可执行文件,并且通常缺少扩展名。

以我的经验,大多数Linux二进制可执行文件都没有文件扩展名;例如Linux系统上/bin目录中的大多数文件都没有扩展名。

另一方面,/lib目录中的大多数文件在文件扩展名中都具有.so,并且还具有可执行权限。直接尝试执行.so文件通常会导致段错误或某些错误,这是有道理的,因为共享库通常旨在动态链接。但是据我了解,如果.so文件具有main()入口点,则you can run it as an executable就像普通的可执行文件一样(即没有扩展名的文件)。

我的问题:

  1. 共享库(.so扩展名)和可执行文件([none]扩展名之间有什么区别?是否只是定义了main()入口点?
  2. 在C ++中,将代码编译成共享库(.so扩展名)和将代码编译成Linux可执行文件([none]扩展名)有什么区别(即,传递给编译器的标志)。
  3. 编辑:This question讨论了如何使用gcc命令行构建.so文件,但没有确定构建.so与普通可执行文件之间的区别。

明确地说,这是关于二进制Linux可执行文件而不是脚本的问题,脚本也可以是可执行文件,并且通常缺少扩展名。以我的经验,大多数Linux二进制可执行文件都缺少文件...

c++ linux shared-libraries executable
1个回答
0
投票
  1. 主要区别之一是共享库没有main()函数。它还包含与位置无关的代码,对于可执行文件可能是,也可能不是。如果do
© www.soinside.com 2019 - 2024. All rights reserved.