gcc 编译或 makefile 编译项目,从 .c .h .cpp .hpp 文件到 可执行成程序 ,主要经过以下四个步骤:
1、预处理 :宏替换,删除注释和多余的空白符,条件编译
2、编译 : 检测是否有语法错误,生成汇编
3、汇编 :生成机器可识别代码,将编译生活曾生成的 .s 文件转成 .o 二进制目标代码
4、链接 :生成可执行文件或库文件
实际参与项目时,主要是通过makefile 编译项目。
经过makefile 编译后,出现大量 undefined reference to `XXXX' 的异常提示信息。
主要原因是链接时找不到对应的函数。
导致这个错误的原因可能是加载静态或动态库时的先后顺序弄反了,原来应该前置的 libAAA.a 静态库却将其置于 libCCC.a 之后。
这时链接过程,需要先链接该libAAA.a 的函数时,链接不到libAAA.a 的函数,而导致 undefined reference to "XXXXX" 异常