gcc编译流程

预处理->编译->汇编->链接

image-20231223162315433

常用编译参数

gcc选项 作用
-o .i,.s,.o,可执行文件等生成目标文件
-E 只对源程序进行预处理,即只生成.i文件后就停止编译,结果输出到标准输出,需要使用>写入指定文件
-S 只生成.s汇编文件后就停止编译
-c 只编译源程序,不对编译后产生的目标代码进行链接
-I 后跟目录,将该目录加入搜索头文件的目录路径
-L 后跟目录,将该目录加入搜索库的目录路径
-l 链接lib库
-g 在目标文件中嵌入调试信息,以便gdb工具对程序进行调试,及用于生成带有调试信息的程序

举例

仅预处理:

gcc -E main.c > main.i


生成汇编代码:

gcc -S main.c


仅编译不进行链接:

gcc -c main.s -o main.o


使用.o文件生成可执行目标程序

gcc main.o -o main

或者 gcc -o main main.c


指定搜索头文件和链接库的目录

gcc -o main main.c -I /home/main/include -L /home/main/lib -lworld

# -lworld表示在上面的lib路径中寻找libworld.so动态库文件

# 如果gcc编译选项加入了-static,则表示寻找libworld.a静态库文件


单文件编译

现有 main.c

编译命令:

gcc main.c -o main

# 如果为windows平台,则将目标文件改为main.exe即可


多文件编译

现有 main.c hello.c hello.h

编译命令:

gcc main.c hello.c -o main

或者将.c文件单独编译:

gcc -c hello.c -o hello.o

gcc -c main.c -o main.o

gcc hello.o main.o -o main


参考:https://zhuanlan.zhihu.com/p/513148985