GCC 7.2 编译共享库而不是可执行文件

GCC 7.2 compiles shared library instead of executable

我有一台安装了 ArchLinux 的虚拟机。在这里,当我通过 运行 gcc file.c 使用 GCC 编译时,它给了我一个共享库而不是可执行文件。

后来我发现问题只与GCC 7.2有关,实际上,当我用GCC 6.4编译时,输出文件是可执行文件。

我该如何解决这个问题?

file 实用程序将您的程序称为共享库是不正确的。它是一个与位置无关的可执行文件 (PIE)。如果你真的不想要这个,你可以在 link 时指定 -no-pie,或者用 --disable-default-pie 构建一个 gcc 工具链,但通常你不需要改变这个。

为了补充您在评论中指出的 file 的答案,GCC 生成的默认 a.out 不是 共享库,而是而是被 file 解释为 共享对象 可能是因为您的源代码的内容。查看 this 了解更多信息。