gcc
1、一个C/C++文件的编译过程,经过
预处理(preprocessing) -> 编译(compilation) -> 汇编(assembly) -> 链接(linking)
. 文件 -> .s 文件 -> .o 文件 -> 可执行文件
示例:
(1)预处理,生成预编译文件 ( . 文件)
gcc -E hello.c -o hello.i
gcc -S hello.i -o hello.s
(3)汇编,生成目标文件 (.o 文件)
gcc -C hello.s -o hello.o
(4)链接,生成可执行文件
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 : 指定 库的路径