我安装了ArchLinux的虚拟机。这里当我通过运行gcc file.c
与GCC一起编译时,它给了我一个共享库而不是可执行文件。
后来我发现问题只与 GCC 7.2 有关,事实上,当我使用 GCC 6.4 进行编译时,输出文件是可执行文件。
我该如何解决这个问题?
答案 0 :(得分:3)
file
实用程序在将程序称为共享库时不正确。它是一个与位置无关的可执行文件(PIE)。如果你真的不想这样,你可以在链接时指定-no-pie
,或者用--disable-default-pie
建立一个gcc工具链,但一般来说你不应该改变它。 / p>
答案 1 :(得分:1)
为了补充您在评论中指出的file
提及的答案,GCC生成的默认a.out
不是共享库,而是被解释为<由file
创建的em>共享对象可能是因为源代码的内容。查看this了解详情。