使用GCC编译Linux可执行文件

9

我正在使用Ubuntu 8.10(Intrepid Ibex),并使用GCC编译C++文件,但是在编译时,GCC会生成一个名为a.out的可执行文件。如何制作Linux可执行文件?


对于您来说,可执行文件和Linux可执行文件有什么区别? - Ben
你能澄清一下吗?*.out文件是可执行文件。你需要其他类型的可执行文件吗? - notnoop
Nathan,“a.out”名称是一个历史文物,来自最早的Unix编译器。请参阅有关此主题的维基百科文章:http://en.wikipedia.org/wiki/A.out - quark
@notnoop:只是 a.out,不是 *.out。(来自未来的问候!) - Keith Thompson
1
a.out should already be executable. No need to do anything else. Just run with ./a.out - Max MacLeod
3个回答

24

那个可执行文件是“Linux可执行文件” - 也就是说,它可以在任何最新的Linux系统上执行。你可以使用以下方式将文件重命名为所需的名称:

rename a.out your-executable-name

或者更好的是,使用以下方式告诉GCC输出文件的位置

gcc -o your-executable-name your-source-file.c

请记住,在Linux系统中运行文件之前,您可能需要设置其“可执行位(executable bit)”:

chmod +x your-executable-name

还要记住,在Linux上,文件的扩展名与实际内容很少有关系 - 你的可执行文件可以被命名为somethingsomething.out,甚至是something.exe,只要它是由GCC生成的,并且你对该文件执行chmod +x命令,你就可以将其作为Linux可执行文件运行。


4
gcc(实际上是它调用的链接器)是否已经在其输出文件中设置了可执行位? - CesarB
2
@CesarB:是的,gcc调用默认使“your-executable-name”可执行。 - quark
1
有些系统可能会有一个“rename”命令,但是“mv”是重命名文件的通常方式。 - Keith Thompson
相反地,它可能会设置太多,也可能不会设置太多:-rwxrwxr-x - Peter Mortensen

4
要创建一个名为myprog的可执行文件,可以像这样调用gcc
gcc -c -o myprog something.c

您也可以将gcc生成的*.out文件重命名为所需的名称。

3
那就是可执行文件。如果你不喜欢 a.out,可以向编译器传递一个 -o 标志。如果可执行文件没有标记可执行位,你需要自己添加:
chmod u+x ./a.out
./a.out

*.out文件已经是一个可执行文件,但我如何构建一个本地的Linux可执行文件,Linux本地可执行文件没有扩展名。 - Nathan Campos
5
在Linux中,文件扩展名并不重要。你可以将文件重命名为任何你喜欢的名称。 - notnoop
当问题是权限时,我知道。谢谢! - Nathan Campos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接