程序Link错误

link 错误

      链接错误一般有两种:undefined symbol/reference 和duplicated symbol

      先来看一下程序链接的过程,举一个简单地例子。Main.cpp调用了lib.cpp中定义的方法和global变量。则过程如下:
在这里插入图片描述

      首先源文件lib.cpp编译后生成目标文件(包含函数和变量的定义),main.cpp编译生成目标文件(记录自己引用了外部符号),链接器为main去目标文件查找外部符号,找到了则链接成功。

undefined symbol/reference错误:

1、 工程缺少源文件(如果我们将Cmakelists.txt中lib.cpp的源文件路径注释掉,编译器会报undefined reference—>xorcpp(int,int)错误)
2、 C与C++生成符号的名字规则的不同之处,考虑如下lib.h的更改:
lib.h内容:
在这里插入图片描述
在这里插入图片描述

      如果将lib.h改为上图2中的内容,则编译器会报undefined reference—>xorcpp错误,注意与1中的差别。由于我们加了extern “C”, 表示按照C风格的符号名字去查找(xorcpp)。

duplicated symbol错误:

1、头文件里定义变量
在这里插入图片描述
在这里插入图片描述

      如果将lib.h改为右图中的内容,则编译器会报multiple reference—>global_integer错误。

2、多文件里误用相同名字(如果在main.cpp中也定义global_integer变量)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值