Cherno的Cpp教程笔记004: 链接器如何工作

  • 现在链接的主要焦点是找到每个符号和函数在哪里。
  • 每个文件被编译成一个单独的目标文件
  • 一个翻译单元,它们彼此之间没有关系
  • 所以如果我们决定把我们的程序分割成多个C+文件
  • 即使只有一个文件,也许知道入口在哪main函数

在这里插入图片描述

  • 这时编译没有问题,但是build链接会出问题

在这里插入图片描述

  • entry point must be defined,每个阶段会报每个阶段的错误,比如C开头的就是编译的错误,LINK开头的就是链接的错误

在这里插入图片描述

  • 程序入口也不一定是main函数,可以手动设定

在这里插入图片描述

  • 如果只在一个文件中调用这个函数,可以加上 static符号
  • 这样就在本文件中不适用Multiply就不会链接

在这里插入图片描述

二义性匹配

在这里插入图片描述

  • 有时两个函数都引用了log.h,又因为log.h就是简单的复制,所以会出二义性的错误,这是加上static修饰就能保证,log函数在链接时的局部性质
    在这里插入图片描述

  • 还可以使用inline,这意味着直接替换

在这里插入图片描述

在这里插入图片描述
变为
在这里插入图片描述

或者(放到其中一个翻译单元中,这样也没有二义性)

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值