![](https://csdnimg.cn/release/download_crawler_static/87971358/bg1.jpg)
使用命令:gcc -Og -o prog main.c sum.c 调用 GCC 的驱动程序。链接器将可重定位的目标文
件组合起来,形成一个可执行目标文件 prog。这个链接的过程
可以分为三个步骤:
1.它首先运行 C 预处理器 cpp,将 C 源程序 main.c 翻译成一个 ASCII 码的中间文件 main.i
2.接下来,C 编译器 cc1 将 main.i 翻译成一个 ASCII 汇编语言文件 main.s
3.最后,汇编器 as 将 main.s 翻译成一个可重定位目标文件 main.o,此时的目标文件还不能
执行,需要通过链接器将其与所依赖的函数(如 sum.o)链接到一块才可以生成可执行文件
� 1、预处理,生成 .i 的文件[预处理器 cpp]
� 2、将预处理后的文件转换成汇编语言, 生成文件 .s [编译器 egcs]
� 3、有汇编变为目标代码(机器代码)生成 .o 的文件[汇编器 as]
� 4、连接目标代码, 生成可执行程序 [链接器 ld]
实例
gcc 选项 = $(CCFLAGS) $(DEFINES) $(-I 链接头文件)
-I 链接头文件 = $(addprefix -I , $(shell find $(头文件文件夹) -type d) ) 解释:-l(大写 i) 指
定额外的头文件搜索路径
CCFLAGS = -g -fPIC -Werror=unused-function 解释:-g 程序可用 gdb 调试 -fPIC 生成动态库
-Werror=unused-function 将没使用函数的警告当做错误。
DEFINES = -DAPP_BIN_NAME=\"$(可执行文件名)\" -DUSER_SW_VER=\"$(USER_SW_VER)\"
解 释 : -D 给 c 文 件 定 义 两 个 宏 APP_BIN_NAME=\"$( 可 执 行 文 件 名 )\"
USER_SW_VER=\"$(USER_SW_VER)\"
库 和 链 接 = -L$(app 文 件 夹 的 绝 对 路 径 )/sdk/lib -lty_iot_sdk -lty_module_gw_base
-lty_module_zigbee -lpthread -lm 解释:-L 指定编译时库的路径 -l 指定编译时引用库的名
字 -lpthread 线程函数库 -lm math 库,math.h 不属于 C 的标准库
库和链接 := -Wl,--start-group $(库和链接) -Wl,--end-group -Wl 指定运行时动态库路径,
--start-group --end-group 用于解决多个库之间的循环依赖