【ChernoC++笔记】C++链接

【7】C++链接器是如何工作的

▶️mingw的编译过程

参考资料

编译过程分为四个步骤:预处理、编译、汇编、链接

  1. 预处理:使用g++ -E learn.cpp -o learn.i命令,预处理后得到learn.i文件;
  2. 编译:成汇编代码的过程,使用命令g++ -S learn.i -o learn.s生成汇编文件learn.s文件,当然直接从learn.cpp文件得到汇编文件也可以;
  3. 汇编:将汇编代码转化成机器指令,生成目标二进制代码。使用命令g++ -c learn.s -o learn.o 生成test.o文件;
  4. 链接:通过链接库文件,将目标文件转化成可执行文件。使用命令g++ learn.o -o learn.exe

❓为什么通常是.h文件声明,.cpp文件定义?

  • 防止include .h的时候多次重复定义,造成链接错误。

▶️两个相同的函数,有相同的参数和返回值,会造成链接错误:链接器不知道链接哪一个函数。

  • 解决方法1:将函数定义为static函数,可以将该函数局限在文件内部,对其他obj文件不可见;
  • 解决方法2:使用inline(将函数调用替换为实际的函数体);
  • 解决方法3:将函数定义移动到一个翻译单元中,在.h文件中仅声明,也就是现在常用的做法。

❓同样的标准头文件在几个翻译单元中都有,为什么不会造成链接错误?

  • 标准头文件只有函数声明,没有函数定义。
posted @   rthete  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
主题色彩
点击右上角即可分享
微信分享提示