您的位置:首页 > 其它

GCC编译过程

2017-07-26 15:15 232 查看

GCC编译过程

单个文件的编译过程

#include <stdio.h>

int main(void)
{
printf("Hello,World\n");
return 0;
}

gcc test.c -o test


编译过程分为四个阶段进行,即预编译(预处理)、编译、汇编和链接

预处理

gcc -E test.c -o test.i


预处理结果是将头文件内容插到test.c中,完成宏定义和include的展开工作

编译为汇编代码

gcc -S test.i -o test.s


经过编译参数进行优化,编译成汇编代码

汇编

gcc -c test.s -o test.o


通过汇编器将其汇编成目标文件

链接

gcc test.o -o test


负责将程序的目标文件与所需的所有附加的目标文件连接起来,最终生成可执行文件

检错

gcc -pedantic test.c -o test

gcc -Wall test.c -o test

gcc -Werror test.c -o test


编译动态库

将3个c源文件test1.c, test2.c test3.c

gcc test1.c test2.c test.c -fPIC -shared -libtest.so


将test.c与动态库libtest.so链接生成test

gcc test.c -L. -ltest -o test

# 可用命令 ldd test 查看


tips: 调用动态库时,已经用-I引入头文件,-L指定了动态库的路径,并用-l指定了引用的库名,用ldd查看时还是无法找到你引用的动态链接库,这时候可以修改LD_LIBRARY_PATH或者/etc/ld.so.conf文件来指定动态库的目录

编译静态库

# 创建和添加都使用ar命令, libtest.a 不存在时会自动创建,
ar rcs libtest.a test1.o test2.o
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  gcc