共享库 (.so) 没有扩展名的 Linux 可执行文件之间的区别?
Difference between shared library (.so) a Linux executable file without extension?
澄清一下,这是一个关于二进制Linux可执行文件的问题,而不是脚本,脚本也可以是可执行的,而且通常缺少扩展。
根据我的经验,大多数 Linux 二进制可执行文件缺少文件扩展名;例如,Linux 系统上/bin
目录中的大多数文件都缺少扩展名。
另一方面,/lib
目录中的大多数文件在其文件扩展名中都有.so
,并且还具有可执行权限。尝试直接执行.so
文件通常会导致 seg 错误或某些错误,这是有道理的,因为共享库通常旨在动态链接。但据我了解,如果.so
文件具有main()
入口点,那么您可以像运行普通可执行文件(即没有扩展名的文件(一样将其作为可执行文件运行。
我的问题:
- 共享库(
.so
扩展名(和可执行文件([none]
扩展名(有什么区别?是否只是是否定义了main()
入口点? - 在C++中,将代码编译到共享库(
.so
扩展(和将代码编译为 Linux 可执行文件([none]
扩展(有什么区别(即传递给编译器的标志(有什么区别吗?
编辑:这个问题讨论了如何使用gcc命令行构建.so文件,但没有确定构建.so与普通可执行文件之间的区别。
- 主要区别之一是共享库没有
main()
函数。它还包含与位置无关的代码,可执行文件可能是也可能不是这种情况。如果您确实在库中放置了main()
函数,您仍然需要将其与普通对象文件(不包含main()
函数(链接。 - 是的。要创建共享库,请使用
-fpic
或-fPIC
编译代码,以生成适合在共享库中使用的位置无关代码 (PIC(。
不过,没有什么可以阻止您创建名为myexe.so
的可执行文件,但它不能用作共享库。
相关文章:
- 在Linux上使用Clang / OLLVM交叉编译helloworld Windows可执行文件时的问题
- 共享库 (.so) 没有扩展名的 Linux 可执行文件之间的区别?
- 如何在 linux 可执行文件中使用静态库
- Linux 可执行文件通过 dlopen 在emplace_back崩溃打开共享库
- 无法在 Linux 上运行C++ ZMQ 项目的可执行文件
- 如何在 Linux 中从 .so 文件打开可执行文件?
- 在 Linux 上没有 /proc/self/exe 的 C/C++ 运行时可执行文件的大小?
- C++ 可执行文件在运行时找不到库,即使它在 /usr/lib 中(在 Linux 上)
- 使用 MINGW 和 CPLEX 库链接从 Linux 编译 Windows 可执行文件
- 如何从 Linux 交叉编译到 32 位 Windows 可执行文件
- 不同的数学符号绑定与共享库与 dlopen 并直接链接到可执行文件 (Linux)
- C++ Linux 可执行文件一直尝试使用不存在的库
- Linux 可执行文件中列出的源文件
- 作为共享库的 Linux 可执行文件
- a.out Linux 可执行文件是哪个程序
- 如何从存储在其他文件夹中的C++运行linux可执行文件
- 如何添加Linux可执行文件到.gitignore
- 欺骗Linux:可执行文件和依赖库通过LD_PRELOAD
- Linux 可执行文件在同一文件夹中找不到共享库
- 如何从windows g++ cygwin交叉编译得到linux可执行文件