您的位置:首页 > 其它

C程序的编译和链接 - gcc

2015-01-05 21:23 363 查看
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 为包含的库文件路径, 后面是包含的具体的三个库函数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐