精华内容
下载资源
问答
  • 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
    

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

    展开全文
  • 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文件 ...

    gcc中-c和-o是编译时可选的参数

    -加-c, (compile)只编译生成中间同名目标文件,不链接
    -加-o,(output)指定输出文件名,该文件为可执行文件,不加-o会默认生成a.out

    举例:
    gcc -c hello.c 编译生成hello.o文件
    gcc -o hello hello.c 生成可执行文件hello

    展开全文
  • gcc -g -o -c分别是什么意思

    万次阅读 2017-09-04 16:41:28
    gcc -g -o -c

    什么是GCC编译器:
    https://zhidao.baidu.com/question/7760891.html?fr=qrl&index=1&qbl=topic_question_1&word=GCC%20hello.c%20-g%20-o%20hello%D6%D0%B5%C4-g%CA%B2%C3%B4%D2%E2%CB%BC

    gcc -g -o -c:
    简单说:

    -g 可执行程序包含调试信息
    -o 指定输出文件名
    -c 只编译不链接
    

    1、-g为了调试用的 ,加个-g 是为了gdb 用,不然gdb用不到
    2、-o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,
    gcc就给出预设的可执行文件a.out。
    一般语法:

    gcc filename.c -o filename
    上面的意思是如果你不打 -o filename 那么默认就是输出filemame.out.这个-o就是用来控制输出文件的。 
    

    3、-c 只编译不链接,产生.o文件,就是obj文件,不产生执行文件

    展开全文
  • Makefile的静态模式%.o : %.c

    万次阅读 多人点赞 2019-03-16 17:09:05
    我们先说一种场景,我们在编写应用程序时,肯定不只有一个文件,会有n多个.C文件,.s文件,少则十个,多则千、万个,我们在windows下写代码,是有各种IDE的,可以一键编译,但linux环境下,是看不上...

       Makefile的静态模式是一个特别高效的“自动化”编译器,“静态”二字,我觉得是直译词意,可能是我不是真正理解什么叫静态,反正这个规则跟中国话的 “静态”没有半毛钱关系。

        我们先说一种场景,我们在编写应用程序时,肯定不只有一个文件,会有n多个.C文件,.s文件,少则几十个,多则几千、几万个,我们在windows下写代码,是有各种IDE的,可以一键编译,但linux环境下,是看不上这种方式的,需要我们自己写Makefile的,这个Makefile的功能就类似于IDE的一键编译,是一个编译脚本,写好Makefile的人,都是牛x的人,因为对各种技术细节都掌握了。

        我们知道一个执行程序的生成,一般是需要2个步骤的,分别为编译和链接,编译的原理就是将.C和.S文件转换成.o文件,也就是所谓的目标文件,然后链接器,将这些目标文件.o 链接成 一个可执行文件。这两个步骤的 命令分别为:

         编译:  gcc -c xxx.c/xxx.s

         链接: gcc  *.o   -o  xxx

        我们在编写Makefile时,一般的框架如下:

    main : func1.o   func2.o   func3.o  funcx.o      
        gcc $^ -o $@
    
    func1.o : func1.c
        gcc -c func1.c
    
    func1.o : func1.c
        gcc -c func1.c
    
    func1.o : func1.c
        gcc -c func1.c
    
    func1.o : func1.c
        gcc -c func1.c
    
        ..........

       其中main为终极目标,而其他的func1.o、func2.o.......一方面是目标main的依赖对象,但是他们本身又是一个小目标,需要进行编译生成。那么问题就来了,如果我们的程序只有几个.c文件还好,如果有几百个、几千几万个呢,我还能这么一个的写编译吗?

    很显然这是不可能的,而且Unix/linux也不允许我们这么愚蠢,那么我们就理所当然的想,是不是有类似于变成语言中的各种循环策略啊,比如for循环、do...while循环什么的,但是即便有这些循环,这些文件名字什么的都不一样啊,我们肯定不能用for什么的命令的,那么Unix/linux给我们提供了什么方法呢,答案是:

                                              静态模式 +  自动化变量

        这个静态模式就是一种自动编译模式,在这种模式下,我们可以容易的定义“多目标”规则,让我们的规则变得更加有弹性和灵活。它的语法如下:

    < targets ....> : < target-pattern > : < prereq-patterns ...>
        <commands>
        .....

    其中:

    targets定义了一些列的目标文件,也就是多目标,可以有通配符,是目标的一个集合。

     target-pattern 是targets的模式,也就是目标集模式

    prereq-patterns 则是目标的“依赖”元素,

    这么去说,可能还是比较拗口,不容易理解,我们还是把理论落地,举例一下吧:

     我们把target-pattern 定义成  %.o  意思是我们的target集合都是以.o结尾。当然这里也可以使用通配符*,只不过%多用于Makefile,他们两个的区别,我们后面再讲。而我们的prereq-patterns则定义为%.c,这意思就是对 target-pattern中所形成的目标集进行二次定义,其计算方法是取target-pattern模式中的%代表部分(其实就是去掉.o后的文件名),并为其加上[.c]结尾,形成新的集合。代码如下:

    $(OBJS) : %.o : %.c
        gcc -c $< -o $@

       这两条命令的功能就是,大目标是OBJS,这个OBJS就是各种.o文件,然后%.o就是具体的解释,而%.c就是对应同样名字的.c文件,而下面的命令,结合了2个自动化变量,$< 表示依赖对象集中的第一个,$@ 则代表了目标集。所以这个功能就是要遍历所有的.c文件,对所有的.c文件进行编译,然后编译生成对应的.o文件。我们在实际编写程序时,targets是不需要的,可以简写如下:

    %.o : %.c
        gcc -c $< -o $@

     

    展开全文
  • 2019美赛Co奖论文结构整理

    千次阅读 多人点赞 2020-03-10 17:04:10
    2019美赛Co奖论文结构整理 美赛终于结束啦,整理一下桌面,由于比赛之前队伍就确定要做C题数据分析题,为了更好地写论文,专门研究了一下往年Co奖的论文结构,和大家分享一下~ 个人审美觉得1922154这篇结构最棒...
  • gcc编译选项-o和-c介绍

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

    千次阅读 2013-08-26 12:55:19
    下面这个例子表示了,把所有的[.c]文件都编译成[.o]文件. %.o : %.c $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
  • cc -c -o的使用

    千次阅读 2016-04-07 17:35:59
    在一个文件夹下一共四个文件 function.h #ifndef __FUNCTION_H__ #define __FUNCTION_H__ void func();...function.c #include #include "function.h" void func() {  printf("this is function
  • 深入 WIN2000 注册表 (14) C O M +

    千次阅读 2008-01-03 14:40:00
    C O M + 简介C O M +是M i c r o s o f t旧式的组件对象模式(Component Object Model,C O M )技术功能强大的新版本。从Windows 2000开始,C O M +把许多以前独立的技术,例如M i c r o s o f t事务处理服务器...
  • g++ -o -c -g 功能

    万次阅读 2016-12-18 22:53:53
    -o:指定生成可执行文件的名称。使用方法为:g++ -o afile file.cpp file.h ... (可执行文件不可与待编译或链接文件同名,否则会生成相应可执行...-c:只编译不链接,只生成目标文件。 -g:添加gdb调试选项。
  • gcc -c与gcc -o以及不加参数的区别

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

    千次阅读 2017-12-02 13:09:00
    GCC编译器驱动程序读取源程序文件hello.c,并将它翻译成一个可执行目标文件hello。这个翻译的过程可分为四个阶段。 1.预处理阶段 预处理器(cpp)根据以字符#开头的命令,修改原始的c程序。比如hello.c中第1行的#...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,283,710
精华内容 913,484
关键字:

oco几月