精华内容
下载资源
问答
  • gcc -c -o编译过程

    千次阅读 多人点赞 2019-07-19 21:36:30
    C源文件到可执行文件共经历了4个过程。在使用GCC编译程序时,编译过程可以被细分为四个阶段,包括预处理、编译、汇编、链接。 分步处理 一、预处理 在预处理阶段,编译器主要作加载头文件、宏替换、条件编译的作用...

    C源文件到可执行文件共经历了4个过程。在使用GCC编译程序时,编译过程可以被细分为四个阶段,包括预处理、编译、汇编、链接。

    分步处理

    一、预处理

    在预处理阶段,编译器主要作加载头文件、宏替换、条件编译的作用。一般处理带“#”的语句。

    我们可以通过gcc -E 选项进行查看,如下所示:

    gcc -E main.c > main.i
    

    编译器将main.c预处理结果输出 main.i 文件。

    二、编译

    在编译过程中,编译器主要作语法检查和词法分析。在确认所有指令都符合语法规则之后,将其翻译成等价的中间代码或者是汇编代码。

    gcc -S main.i -o main.s
    

    编译器将预处理结果文件main.i翻译成汇编代码main.s

    三、汇编

    汇编阶段是把编译阶段生成的”.s”文件转成二进制目标代码。

    gcc -c main.s -o main.o
    

    编译器将main.s文件转化为main.o 文件。

    四、链接

    在成功编译之后,就进入了链接阶段。链接就是将目标文件、启动代码、库文件链接成可执行文件的过程,这个文件可被加载或拷贝到存储器执行。

    gcc main.o -o main
    

    编译器将main.o链接成最终可执行文件main.exe

    一步到位

    执行以下代码:

    gcc main.c -o main
    

    多模块编译

    一次性编译:

    gcc -Wall main.c main_fun.c –o main
    

    独立编译:

    gcc –Wall –c main_fun.c –o main_fun.o
    
    gcc –Wall –c –o main.o main.c 
    
    gcc –Wall main_fun.o fun.o –o main
    

    多模块编译中如果某一个模块发生了变化,只需要编译更改的模块即可

    展开全文
  • linux GCC -o与-c

    千次阅读 2019-09-09 20:18:27
    GCC编译运行可执行文件main.c gcc -o main main.c rm a.out ./main

    一c语言gcc编译过程:


    ![](https://img-blog.csdnimg.cn/20191006161104848.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NzZG5feWFvaGFpbG9uZw==,size_16,color_FFFFFF,t_70

    二、gcc -c与gcc -o以及不加参数的区别

    三、GCC编译运行可执行文件main.c

    gcc main.c -o main
    ./main 运行

    展开全文
  • gcc -cgcc -o以及不加参数的区别

    万次阅读 多人点赞 2019-03-21 15:30:22
    一、问题描述 可能你在看makefile教程的时候会碰到一个问题,就像我就碰到了,我看的是陈皓 (CSDN)前辈的教程 ... 我把问题贴出来,里面有一段makefile是这么写的: ...edit : main.o kbd.o command.o display.o / ...

    一、问题描述

    可能你在看makefile教程的时候会碰到一个问题,就像我就碰到了,我看的是陈皓 (CSDN)前辈的教程

    https://seisman.github.io/how-to-write-makefile/overview.html

    我把问题贴出来,里面有一段makefile是这么写的:

    edit : main.o kbd.o command.o display.o /
               insert.o search.o files.o utils.o
        cc -o edit main.o kbd.o command.o display.o /
               insert.o search.o files.o utils.o
    

    这个看着有点长,为方便阐述我把这句简化一下,记作makefile(Ⅰ),主要是想要表达这个语法

    edit : main.o
        gcc -o edit main.o

    以前我写makefile是这么写的,记作makefile(Ⅱ):

    main.o : main.c
        gcc -o main.o main.c

    这个时候就犯迷糊了,啥意思啊,这咋整啊,难道以前写的makefile(Ⅱ)生成的main.o还能再改个名,改成edit不成,然后我就在shell中手动执行了一下makefile(Ⅱ)中的gcc命令,首先生成main.o:

    gcc -o main.o main.c

    然后再执行makefile(Ⅰ)里的写法:

    gcc -o edit main.o

    结果报错了:

    /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o: In function `_start':
    (.text+0x20): undefined reference to `main'
    collect2: error: ld returned 1 exit status

     

    二、问题原因

    于是搜索报错原因,说是找不到main函数的问题,莫非我把main写错了?于是去看自己的源代码,结果没有错误。那又是为啥?

    翻了很多博客,最后在这篇博客里找到了原因,讲了C源文件到可执行文件的过程:

    参考:https://www.cnblogs.com/qytan36/archive/2010/05/25/1743955.html

     

    C源文件到可执行文件共经历了4个过程。在使用GCC编译程序时,编译过程可以被细分为四个阶段,包括预处理、编译、汇编、链接。

    1、预处理

    在预处理阶段,编译器主要作加载头文件、宏替换、条件编译的作用。一般处理带“#”的语句。

    我们可以通过gcc 的 -E 选项进行查看,如下所示:

    gcc -E main.c > main.i

    编译器将main.c预处理结果输出 main.i 文件。

    2、编译

    在编译过程中,编译器主要作语法检查和词法分析。在确认所有指令都符合语法规则之后,将其翻译成等价的中间代码或者是汇编代码。

    gcc -S main.i -o main.s

    编译器将预处理结果文件main.i翻译成汇编代码main.s

    3、汇编

    汇编阶段是把编译阶段生成的”.s”文件转成二进制目标代码。

    gcc -c main.s -o main.o

    编译器将main.s文件转化为main.o 文件。

    4、链接

    在成功编译之后,就进入了链接阶段。链接就是将目标文件、启动代码、库文件链接成可执行文件的过程,这个文件可被加载或拷贝到存储器执行。

    gcc main.o -o main.exe

    编译器将main.o链接成最终可执行文件main.exe
     

    三、问题解决

    看了上面的博客忽然意识到,我之前在第一部分里写的命令:

    gcc -o edit main.o

    里面的main.o是我用命令gcc -o main.o main.c生成的可执行文件,这个main.o是我习惯性的取名为.o后缀,但我之前并不知道它是什么类型的文件。其实这个并不是通过上面第二节中第二步编译生成的.obj文件!而是最终生成的可执行的.out文件!终于知道弄错在什么地方了!

     

    四、gcc -c与gcc -o以及不加参数的区别

    以下摘自gcc --help的解释(gcc version 7.3.0):

    -c               Compile and assemble, but do not link.
    -o <file>        Place the output into <file>.
                     'none' means revert to the default behavior of guessing the language based on the file's extension.

    中文翻译一下:

    -c           编译和汇编,但不要链接。
    -o <file>    将输出放入<文件>。
    '无参数'      表示恢复为基于文件扩展名猜测语言的默认行为。

     

    1、通过gcc 不加参数可以一步直接编译生成可执行文件

    gcc main.c

    这里生成的是可执行文件a.out,当然可以通过-o选项更改生成文件的名字,比如将生成的可执行文件命名为hello.exe

    gcc main.c -o main.exe

    2、gcc -c 编译生成main.o

    gcc -c main.c   #生成main.o
    ​
    gcc main.o    #不加参数,gcc自动链接上一步生成的main.o来生成最终可执行文件a.out
    

    当然也可以通过-o选项更改生成的执行文件的名字

    gcc main.o -o main.exe

    好了,还有啥不懂得可以一起探讨,我也是这两天碰到修改makefile的需求才接触makefile.^^

    展开全文
  • gcc -o 什么意思

    千次阅读 2021-04-27 13:29:24
    gcc 命令:用来编译C和C++文件-c 编译、汇编而不链接 -S 编译而不进行汇编和链接 -E 预处理 -v 同时显示编译器的代码 -o<文件> 将输出输入到指定文件 -x<语言> 指定语言 --help 显示帮助信息 --version ...
    • gcc
    gcc 命令:用来编译C和C++文件-c 编译、汇编而不链接
    -S 编译而不进行汇编和链接
    -E 预处理
    -v 同时显示编译器的代码
    -o<文件> 将输出输入到指定文件
    -x<语言> 指定语言
    --help 显示帮助信息
    --version 显示版本信息
    

    一般情况下如果是单个字符的话使用 ‘-’ ; 如果后面是跟一个word也就是单词的话使用 “- -” ;大部分适用;

    在Linux 中输入

    # hello_world.c文件内容是
    vim hello_world.c  
    #按i ,进入输入模式
    
    #include 
    
    int main ()
    {
    
    printf(“Hello World “);
    
    return 0;
    }
    
    # 按ESC 之后 :wq 保存退出
    
    # 编译 然后将输出输入到hello文件中
    gcc -o hello hello_world.c 
    # 执行
    ./hello
    # 显示内容:Hello World
    
    展开全文
  • gcc -g -o -c分别是什么意思

    万次阅读 2017-09-04 16:41:28
    gcc -g -o -c
  • GCC -o 选项 (指定输出文件)

    千次阅读 2019-02-21 14:12:23
    GCC -o 选项 (指定输出文件) GCC -o 选项用来指定输出文件。 [infile] -o [outfile] [infile] 表示输入文件 (需要处理的文件),可以是源文件,也可以是汇编文件或者是目标文件。 [outfile] 表示输出文件 (处理的...
  • -c和-o都是gcc编译器的可选参数 -c表示只编译(compile)源文件但不链接,会把.c或.cc的c源程序编译成目标文件,一般是.o文件。 -o用于指定输出(out)文件名。不用-o的话,一般会在当前文件夹下生成默认的a.out文件作为...
  • 一、-g -g可执行程序包含调试信息 -g为了调试用的 加个-g 是为了gdb 用,不然gdb用不到 二、-o -o指定输出文件名 ...-o output_filename,确定输出文件的名称...gcc filename.c -o filename 上面的意思是如果你不...
  • gcc -g -c -o区别

    千次阅读 2019-10-26 19:36:35
    -g 可执行程序包含调试信息 -o 指定输出文件名 -c 只编译不链接 -g为了调试用的 加个-g 是为了gdb 用,不然gdb用不到 -o output_filename,确定输出文件的名称为...gcc filename.c -o filename 上面的意思是如...
  • gcc中-c和-o参数

    千次阅读 2017-09-05 15:03:20
    gcc中-c和-o是编译时可选的参数-加-c, (compile)只编译生成中间同名目标文件,不链接 -加-o,(output)指定输出文件名,该文件为可执行文件,不加-o会默认生成a.out举例: gcc -c hello.c 编译生成hello.o文件 ...
  • linux GCC -O参数设置整理

    千次阅读 2018-04-02 15:12:32
    -O参数只有5个级别,并不是设置的越高越好(以前的GCC支持很高的级别,但是现在确实只有5级)◆-O0:关闭所有优化选项◆-O1:基本优化,编译器会生成更快的代码◆-O2:-O1的升级版,推荐使用◆-O3:这是目前最高的...
  • Gcc 编译优化简介 gcc 提供了为了满足用户不同程度的的优化需要,提供了近百种优化选项,用来对{编译时间,目标文件长度,执行效率}这个三维模型进行不同的取舍和平衡。优化的方法不一而足,总体上将有以下几类:1)...
  • gcc编译选项-o和-c介绍

    万次阅读 2019-03-10 11:19:50
    一选项-o 1点睛 选项-o用于指定要生成的结果文件,后面跟的就是结果文件名字。 o是output的意思,不是目标的意思。 结果文件可能是预处理文件、汇编文件、目标文件或者最终可...gcc -c test.cpp -o test # 这个...
  • gcc-c-o命令

    2015-08-12 23:05:13
    gcc -c a.c 编译成目标文件a.o gcc -o a a.o 生成执行文件a.exe gcc a.c 生成执行文件a.exe gcc -o a -c a.c 编译成...在a.c中引用test.c中的一个函数后: gcc -c test.c 编译成目标文件test.o gcc -c a.c 编
  • gcc -o hello hello.c 执行过程

    千次阅读 2017-12-02 13:09:00
    GCC编译器驱动程序读取源程序文件hello.c,并将它翻译成一个可执行目标文件hello。这个翻译的过程可分为四个阶段。 1.预处理阶段 预处理器(cpp)根据以字符#开头的命令,修改原始的c程序。比如hello.c中第1行的#...
  • 报错内容 /tmp/cc7eQyD4.o: In function `main':test.c:(.text+0x51): undefined reference to `sqrt'collect2: ld returned 1 exit status ...gcc -o test test.c -lm 转载于:https://www.cnblogs.com/ze...
  • gcc -c -o

    千次阅读 2014-05-29 14:41:19
    gcc -c a.c 编译成目标文件a.o gcc -o a a.o 生成执行文件a.exe gcc a.c 生成执行文件a.exe gcc -o a -c a.c 编译...在a.c中引用test.c中的一个函数后: gcc -c test.c 编译成目标文件test.o gcc -c a.c 
  • gcc -O1 -O2 -O3 -Os -Ofast -Og的作用

    千次阅读 2018-04-12 10:20:00
    作者:知乎用户链接:...一下内容摘自Using the GNU Compiler Collection (GCC)一般来说,如果不指定优化标识的话,gcc就会产生可调试代码,每条指令之间将是独立的:可以在指...
  • gcc编译优化-O0 -O1 -O2 -O3 -OS解析

    万次阅读 2019-07-16 14:29:06
    gcc提供了近大量优化选项,用来对编译时间,目标文件长度,执行效率三个维度进行不同的取舍和平衡。gnu的官方网站的描述理解起来难度较大,本文仅介绍常用的一些选项。 gcc 常用编译选项 -c 只编译并生成目标文件...
  • gccgcc-c++理解

    千次阅读 2020-04-01 17:27:17
    一般来说gcc就是c语言的编译器,gcc-c++是c++的编译器 g++和gcc的区别: 1、对于不同后缀的文件当作程序不同。 c后缀的文件,gcc把它当做是C程序;g++当做是C++程序;对于.cpp后缀的文件,gcc和g++都会当做c++程序...
  • gcc -m32报错的解决办法

    千次阅读 2019-06-20 16:27:36
    报错:gcc -m32 In file included from push_test.c:1:0: /usr/include/stdio.h:27:10: fatal error: bits/libc-h ##解决方法: sudo apt-get install libc6-dev-i386 有可能会报错:ubuntu下无法获得锁 /var/lib/...
  • gcc / -E、-S、-c 和 -o

    千次阅读 2019-07-21 10:12:06
    @time 2019-07-21 @author Ruo_Xiao 1、C++代码编译成可执行程序,会...2、上述各个过程都可以通过 gcc 的编译选项来分别进行处理。 编译选项 生成文件 代码示例 -E 预处理文件(main.i) g++ -...
  • gcc -I -L -l区别

    万次阅读 多人点赞 2018-08-14 14:45:41
    我们用gcc编译程序时,可能会用到“-I”(大写i),...gcc -o example1 example1.c -I /usr/local/include/freetype2 -lfreetype -lm 上面这句话在编译example1.c 时,-I /usr/local/include/freetype2 表示将/us...
  • gcc 中-O1 -O2 -O3 优化的原理

    千次阅读 2019-04-29 10:55:55
    一般来说,如果不指定优化标识的话,gcc就会产生可调试代码,每条指令之间将是独立的:可以在指令之间设置断点,使用gdb中的 p命令查看变量的值,改变变量的值等。并且把获取最快的编译速度作为它的目标。 当优化...
  • GCC 最初只用了编译 C 语言程序,全称是 GNU C Compiler。后来扩展为可以编译多种语言,所以又称为 GNU Compiler Collection。GCC 是开源免费的编译器。 GCC 常见用法 GCC 是一组工具的集合,这些工具可以执行预处理...
  • GCC -O -C命令

    千次阅读 2014-06-27 09:50:52
    gcc -c a.c 编译成目标文件a.o gcc -o a a.o 生成执行文件a....gcc -o a -c a.c 编译成目标文件a gcc -o a a.c 生成执行文件a.exe 在a.c中引用test.c中的一个函数后: gcc -c test.c 编译成目标文件te
  • gcc -o、-g选项

    千次阅读 2013-08-09 15:07:49
    除了-O0以外,每一个-O设置都会多启用几个选项,请查阅gcc手册的优化选项章节,以便了解每个-O等级启用了哪些选项及它们有何作用。 让我们来逐一考察各个优化等级: -O0:也即是直接输入-o , 这个等级(字母“O”...
  • GCC -O 优化等级详解

    万次阅读 2018-10-19 16:41:40
    GCC提供选项控制代码的优化等级: 这些选项可以实现不同程度的优化。 没有任何优化选项的话,编译时的目标是降低编译成本,并使调试产生预期的结果。语句是独立的:如果你使程序停止在语句之间设置的断点处,你...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 251,356
精华内容 100,542
关键字:

gcc-c-o