【问题标题】:Linux Novice Question: GCC Compiler outputLinux新手问题:GCC编译器输出
【发布时间】:2011-05-08 14:26:19
【问题描述】:

我是 Linux 的新手。我在笔记本电脑上安装了 Mint,最近一直在玩它。

我编写了一个简单的 C 程序并保存了文件。 然后在命令行中输入

gcc -c myfile

然后弹出一个名为 a.out 的文件。我天真地(在多年使用 Windows 之后)期望出现一个不错的 .exe 文件。我不知道如何处理这个 a.out 文件。

【问题讨论】:

    标签: c linux gcc compilation


    【解决方案1】:

    使用-o 命名并跳过-c

    gcc -Wall -o somefile myfile
    

    您应该使用 .c 扩展名来命名您的源文件。

    典型的编译方式,例如两个源文件变成一个可执行文件:

    #Compile (the -c) a file, this produces an object file (file1.o and file2.o)
    
    gcc -Wall -c file1.c
    gcc -Wall -c file2.c
    
    #Link the object files, and specify the output name as `myapp` instead of the default `a.out`
    
    gcc -o myapp file1.o file2.o
    

    你可以把它变成一个步骤:

    gcc -Wall -o myapp file1.c file2.c
    

    或者,对于您使用单个源文件的情况:

    gcc -Wall -o myapp file.c
    

    -Wall 部分的意思是“启用(几乎)所有警告”——这是你应该从一开始就养成的习惯,它可以让你在以后调试奇怪的问题时省去很多麻烦。

    a.out 名称是旧 Unix 遗留下来的,它是一种可执行格式。默认情况下,链接器仍将文件命名为 a.out,尽管它们现在倾向于生成 ELF 而不是 a.out 格式的可执行文件。

    【讨论】:

    • 谢谢。只是要清楚 myfile 是源文件的名称吗? somefile 是输出可执行文件的名称?
    • @JJG:是的。 -o filename 指定“输出文件名”。 -c 指定“只编译,不链接”。如果不指定输出文件名,编译器会根据filename.c生成filename.o,而链接器默认为a.out
    • 如果您倾向于使用不同的编译器进行编译,-ansi -pedantic 也可能很有用。 gcc 编译的默认语言是“GNU-C”;并非所有编译器都编译该语言; OTOH,所有所谓的C编译器都可以(以不同程度的难度)编译“C”。 gcc -ansi -pedantic 的行为非常类似于 C (ANSI C89 / ISO C90) 编译器。
    【解决方案2】:

    a.out 是可执行文件。

    运行它:

    ./a.out
    

    【讨论】:

    • 如果他通过了-c,则无法执行
    • 谢谢。但是为什么默认情况下它没有与源文件同名呢?我也尝试通过双击从桌面打开它,但它无法打开。
    • 如果他真的通过-cgcc 会生成myfile.o,而不是a.out
    • @JJG,为此你需要询问 gcc 的实施者 :)
    • 特伦特,你是对的吗?我都试过了,我忘记了哪个产生了哪个输出。但我更感兴趣的是这个 a.out 文件是什么。
    猜你喜欢
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多