gcc 工具调用 C预处理器、C编译器、汇编器和连接器。
C预处理器: 扩展宏定义并包含头文件
C编译器: 根据源文件中的指令创建汇编语言代码
汇编器 : 创建计算机刻度的目标文件,每个源文件都会创建一个目标文件
连接器 : 连接器搜索指定的函数库,找到程序使用的函数,并将这些函数的目标模块与本程序的目标代码合并在一起。
默认情况下,C编译器会连接标准C函数库libc.o
如果希望连接器搜索其他函数库,用户必须在命令行上使用 -l ( 小写l ) 选项指定这些函数库。与大多数Linux系统工具选项不同,-l 选项在命令行上的位置并不是在所有文件名之前,而是通常出现在所有应用它的模块的文件名之后。
在下面的示例中,C 编译器搜索数学函数库 libm.o
$ gcc calc.c -lm
% -l 选项使用函数库名称约定,将跟在-l后面的那个字母追加到lib后面,并添加扩展名.so 或者.a.
本例中的m代表libm.so
使用相同的命名机制,可以使用下面的命令连接到名为libgraphics.a的图形函数库:
$ gcc pgm.c -lgraphics
如果使用这个约定来命名函数库,gcc知道在/usr/lib 和/lib中搜索这些函数库。还可以使用-L选项让gcc搜索其他目录:
$ gcc pgm.c -L/usr/XllR6/lib -lgraphics
在这个示例中,gcc在搜索/usr/lib和/lib目录之前,在工作目录和/usr/XllR6/lib中搜索函数库文件libgraphics.a
gcc 和编译有关的选项
-c 只激活预处理、编译和汇编,生成扩展名为.o 的目标代码文件
-S 只激活预处理和编译,生成扩展名为.s的汇编代码文件
-E 只激活预处理,并将结果输出至标准输出
-g 为调试程序(如gdb)生成相关信息
-c 选项在编写大型程序时是必须的。存在依赖关系的源代码文件总是需要首先编译成目标代码,最后一起连接成可执行文件。
依据以上四步,依次生成
经预处理的C原始程序 *.i , 汇编语言原始程序 *.s , 二进制目标代码 *.o , 连接后生成可执行文件
摘自: 李玉波等, 《Linux C 编程》
---------------------------------------------------------------------------
g++ my_main.cpp -o my_mian -I /usr/local/include -L /usr/local/lib -lopencv_imgproc -lopencv_core -lopencv_highgui
注:-I 为大写的字母i, 是包含头文件
-L 为包含的库文件路径, 后面是包含的具体的三个库函数