gcc
1、一个C/C++文件的编译过程,经过
预处理(preprocessing) -> 编译(compilation) -> 汇编(assembly) -> 链接(linking)
. 文件 -> .s 文件 -> .o 文件 -> 可执行文件
示例:
(1) 预处理,生成预编译文件 ( . 文件)
gcc -E hello.c -o hello.i
(2)编译,生成汇编代码 ( .s 文件)
gcc -S hello.i -o hello.s
(3)汇编,生成目标文件 (.o 文件)二进制文件,机器码
gcc -C hello.s -o hello.o
(4)链接,生成可执行文件,elf文件
gcc hello.o -o hello
一步到位 :gcc hello.c -o hello
2、编译选项
常用选项
选项 | 含义 |
---|---|
-v |
查看gcc编译器的版本,显示gcc执行时的详细过程 |
-o <file> |
指定输出文件名为file |
-E |
只预处理,不编译、汇编、链接 |
-S |
只编译,不会汇编和链接 |
-C |
编译和汇编,不会链接 |
-g |
编译[debug]版本 gcc hello.c -g -o hello
|
-O1/O2/O3 |
编译[优化] |
3、相关补充
Q1: 如果 .h 文件和 .c 文件不在同一级目录,怎么编译?假设hello.h在hello.c的上一级目录
Q2: 如果 hello 需要使用 libpthread.so 中的函数?
Q3: 如果 hello 需要使用 /home/lib 中的 libtest.so 中的函数?
A1:
gcc hello.c -o hello -I..
编译选项 -I
: 指定后面的路径为优先寻找头文件的目录路径
A2:
gcc hello.c -o hello -I.. -lpthread
编译选项 -l (-lpthread)
: 寻找动态链接库文件libpthread.so
(也就是文件名去掉前缀和后缀所代表的库文件,即指定 库 的名称)
A3:
gcc hello.c -o hello -I.. -L/home/lib -ltest
编译选项 -L
: 指定 库的路径
-I ; -l ; -L 三大选项
网友评论