C/C++的编译过程(2)——实际过程

目录

C/C++的编译过程(2)——实际过程

具体过程命令如下(这里使用gcc):

文件的查找


C/C++的编译过程(2)——实际过程

在我们程序写完之后,如果你使用的是IDE那这些编译过程会一并执行。

如果不是我们需要编译工具去一步一步运行。

具体过程命令如下(这里使用gcc):

(1).预处理(preprocessing) , 生成.i文件 :找头文件,展开宏

gcc -E -o main.i main.c

gcc -E -o sub.i sub.c

(2).编译(compilation),生成.s文件:

gcc -S -o main.s main.i

gcc -S -o sub.s sub.i

(3).汇 编(assembly)生成.o文件:

gcc -c -o main.o main.s

gcc -c -o sub.o sub.s

(4)链接(linking):

将所有.o .a .so文件合并在一起→输出可执行文件

gcc -o test main.o sub.o /*在这里可以理解为在生成链接的过程中生成了.a 或 .so 文件。

(也可以手动生成:

实际上.a 和 .so文件是可以通过.o文件来产生的

gcc -shared -o libsub.so sub.o

ar crs libsub.a sub.o

最后

gcc -o test main.o libsub.so

gcc -o test main.o libsub.a

gcc -o test main.o -L ./ -lsub 去指定路径查找。(-lsub 就是libsub.so文件)

############

实际上这些过程生成时不必一步一步生成,可以两步,三步一起都是可以的。

如:

gcc -c -o main.o main.i

从.i文件→直接到.o文件。

############

文件的查找

(1).库文件和头文件的寻找

以上面的为例:

#include    <stdio.h>           printf函数  --stdio.c              stdio.h

尽管我们没有定义#include ,会去默认系统目录去找头文件;

对应的库,也会去默认系统目录去找;(库对应的 stdio.c定义了printf函数)

#include "sub.h"                  sub_fun函数  -- sub.c             sub.h

可以自定义路径头文件,库的路径

如:

头文件 -I: gcc -c -o main.o main.c -v -I ./

库 -L: gcc -o test main.o -lsub -L /libsub.so/所在目录/

(2).我们已经生成了可执行文件,./test 时仍然执行不了

运行时仍然找不到库,所以需要更改修改环境变量

export LDLIBRARYPATH=$LDLIBRARYPATH:./ (./当前目录)

运行:

./test

/以上的四个过程:有时候将前面三个称为编译,有时候将四个过程全部都称为编译/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值