Qt中undefined reference to报错的三种可能性和解决方法(以libgdal为例)

30 篇文章 4 订阅
21 篇文章 4 订阅

有一段代码很久没动了,今天想跑起来编译看看,突然发现出现一堆报错,如下:
在这里插入图片描述
好吧,首先我能保证的是,有之前调试代码过程中,这些报错一定是没有出现的。最近也没什么动作,怎么就忽然就出现了。
不管怎么说,解决问题是关键。
单纯这个报错内容来看,很典型的undefined reference to的报错,这个报错在调用第三方库的编程中,简直是家常便饭,代表的含义也很明确,就是找不到函数的定义。
用C++写代码的都知道,在C++中,代码是分为声明和定义的,声明就是告诉编译器有这个函数,换言之,就是个名字,而定义,就是具体这个函数的实现内容。
类似这个报错的,还会有一种报错是undeclared的报错,这大概就是函数声明的报错。
言归正传,undefined reference to的报错一般怎么处理

  1. 应该首先想到是不是没有对应的库文件,于是我去/usr/local/lib目录下找libgdal.so.26,能找到。
  2. 如果库文件在,那也可能是Qt没找到这个库,那就手动外部导入库试试,发现没用。
    当发现上述两点都不是原因之后,说明从这里能获取的报错信息就不足以解决这个问题了,于是,这个时候,就把目光转移到编译输出的那个tab页中,查找蛛丝马迹。然后就发现了问题的关键。在编译输出的内容中,有这样的报错
/usr/bin/ld: warning: libxerces-c-3.2.so, needed by /usr/local/lib/libgdal.so.26, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libnetcdf.so.15, needed by /usr/local/lib/libgdal.so.26, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libhdf5_serial.so.103, needed by /usr/local/lib/libgdal.so.26, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libogdi.so.4.1, needed by /usr/local/lib/libgdal.so.26, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libCharLS.so.2, needed by /usr/local/lib/libgdal.so.26, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libgeotiff.so.5, needed by /usr/local/lib/libgdal.so.26, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libcfitsio.so.8, needed by /usr/local/lib/libgdal.so.26, not found (try using -rpath or -rpath-link)

问题就明显了,缺少了很多的libgdal的依赖库,这个就让我很摸不着头脑了,明明之前没有这些报错,说明依赖都没问题的,怎么突然就出现问题了。我认真回忆了一下,怀疑可能是在卸载别的软件的时候,利用sudo apt autoremove时,把一些依赖给误删了。
问题是很好解决的,就是把缺的依赖再给他装上去就好了,特别提醒一下,别的依赖都好找,直接sudo apt install XXXXX多试几回,基本也就找到了,这其中有两个库不是很好找,libmfhdfaltlibdfalt,这两个库需要安装libhdf4-alt-dev来解决。
那么总结一下,出现undefined reference to报错的可能原因有三条:

  1. 没有这个库文件。
  2. 库文件有,但是Qt找不到他的位置。
  3. 这个库文件的依赖丢失。
  • 21
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鱼月半

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值