【ChernoC++笔记】C++链接
▶️mingw的编译过程
编译过程分为四个步骤:预处理、编译、汇编、链接。
- 预处理:使用
g++ -E learn.cpp -o learn.i命令,预处理后得到learn.i文件;- 编译:成汇编代码的过程,使用命令
g++ -S learn.i -o learn.s生成汇编文件learn.s文件,当然直接从learn.cpp文件得到汇编文件也可以;- 汇编:将汇编代码转化成机器指令,生成目标二进制代码。使用命令
g++ -c learn.s -o learn.o生成test.o文件;- 链接:通过链接库文件,将目标文件转化成可执行文件。使用命令
g++ learn.o -o learn.exe。
❓为什么通常是.h文件声明,.cpp文件定义?
- 防止include .h的时候多次重复定义,造成链接错误。
▶️两个相同的函数,有相同的参数和返回值,会造成链接错误:链接器不知道链接哪一个函数。
- 解决方法1:将函数定义为static函数,可以将该函数局限在文件内部,对其他obj文件不可见;
- 解决方法2:使用inline(将函数调用替换为实际的函数体);
- 解决方法3:将函数定义移动到一个翻译单元中,在.h文件中仅声明,也就是现在常用的做法。
❓同样的标准头文件在几个翻译单元中都有,为什么不会造成链接错误?
- 标准头文件只有函数声明,没有函数定义。

浙公网安备 33010602011771号