linux gcc 编译过程及多文件编译

linux使用gcc的编译过程可以分为4步:
预处理
编译
汇编
链接

以hello.c为例:

#include<stdio.h>
int main()
{
printf("Hello - world!\n");
return 0;
}

(1)预处理
主要是处理 宏定义、内联函数等语意处理。可以使用:

gcc -E hello.c -o hello.i

-E 是预处理选项。
.i 表示已经预处理过的C原始程序。

(2)编译过程
主要检查代码的规范性、语法错误检查等,并把代码翻译成汇编代码。

 gcc -S hello.i hello.s

-S 编译生成汇编选项
.s 代表生成的文件是汇编文件

(3)汇编过程
编译生成的.s文件,生成二进制的目标文件。

gcc -c hello.s hello.o

(4)链接阶段
链接到函数库。函数库分为静态库和动态库两种。静态库是指链接时,把库文件的代码全部加入到可执行的文件中。后缀为.a 。 动态库是在执行文件时,由运行时链接加载文件库,这样可以节省系统开销;后缀为.so。

gcc hello.o -o hello

-L 选项 可以指定链接库的文件夹
-static 选项 可以强制性的使用静态链接库
如:

gcc -L /usr/dev/lib  -staitc -limysqlclient -test.o -o test

二、多个文件的编译过程
例如:
main.c文件中代码如下:

#include<stdio.h>
#include<stdlib.h>
void goodbye_world(void);
int main(void )
{
        goodbye_world();
        exit(0);
}

goodbye.c 文件中代码如下:

#include<stdio.h>
void goodbye_world(void)
{
        printf("Goodbye - world!\n");
}

以上中的main.c文件的编译依赖于文件goodbye.c。
方法一:
可以先使用指令将上面的两个文件的编译成二进制文件(因为函数的链接发生在链接阶段):

gcc -c main.c -o main.o
gcc -c goodbye.c -o goodbye.o

生成main.o 和 goodbye.o。

gcc main.o goodbye.o -o goodbye

然后可以生成 goodbye可执行文件。

方法二:
由于c++编译器对编译做了处理,可以直接使用下面命令:

gcc main.c goodbye.c -o goodbye

即可生成goodbye可执行文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值