gcc编译指令详解

一 GCC编译流程

    1.预处理阶段

    gcc -E hello.c -o hello.i

    说明:(1)-o <输出文件> :指定输出文件

                (2)-E 只执行编译预处理

    该阶段是读取头文件的内容,并把相应的内容插入到源代码,预处理结束后停止编译过程。

    cat hello.i|less 查看

    2.编译阶段

    gcc -S hello.i -o hello.s

    cat hello.s

    说明:(1) -S 将代码转换为汇编

    该阶段首先检查代码的规范性,是否有语法错误,检查无误后,将其翻译为汇编代码。

    3.汇编阶段

    gcc -c hello.s -o hello.o

    说明:(1)-c 只进行编译操作,不进行链接操作

    该阶段汇编器将汇编代码编译成机器语言指令。

    4.链接阶段

    gcc hello.o -o hello1

    ls -l hello1

    file hello1

    说明:GCC在编译时默认使用动态库。动态库在链接时并没有把库文件的代码加入到可执行文件,而是在程序执行时由运行时链接文件加载库。

    gcc -static hello.o -o hello2

    ls -l hello2

    file hello2

    说明:静态链接,把库文件的代码全部加载到可执行文件,因此生成的文件比较大。

    5.gcc其它指令形式

    (1) gcc -Wall hello.c

    说明:1)编译源代码文件生成对象文件(.o),链接对象文件得到可执行文件,删除对象文件。采用默认的文件名:a.out。

                2)显示警告信息

    gcc -Wall hello.c -o hello

    说明:指定可执行文件名为hello。

     (2)gcc -c -Wall a.c b.c c.c d.c

     说明:将多个源文件生成对应的对象文件。

    (3)多个源文件生成可执行文件

    gcc -Wall hellomain.c sayhello.c -o hello

    说明:hellomain.c调用sayhello.c,该命令将两个文件分别编译为对象文件且将其链接为可执行文件hello,并删除对象文件。

    (4)链接gcc非默认库函数

    在编译的时候要加入“-l库的首字母”来进行编译。

    进一步说明:编译程序时,得到undefined reference to 'XXXX'的错误提示。

                            那一定时缺少某个库,用-l参数将库加入。Linux的库命名是一致的,一般为libxxx.so, libxxx.a, libxxx.la, 那么链接某个库就用-lxxx, 去掉头lib和后缀。

    gcc hello.c -lm -o hello

    程序中用到math.h,该文件不是gcc默认的头文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值