x0.so: undefined reference to `__cxa_throw_bad_array_new_length@Qt_5‘问题解决分析

问题描述

libxxxx0.so: undefined reference to `__cxa_throw_bad_array_new_length@Qt_5’
collect2: error: ld returned 1 exit status
make: *** [Makefile:1287: 1790] Error 1
15:39:35: 进程"/usr/bin/make"退出,退出代码 2 。
Error while building/deploying project 1790 (kit: Replacement for “Desktop Qt 5.14.2 GCC 64bit”)
The kit Replacement for “Desktop Qt 5.14.2 GCC 64bit” has configuration issues which might be the root cause for this problem.
When executing step “Make”


问题分析:

  1. 该项目由QT5.8 Ubuntu环境下创建,动态库libxxx.so使用QTcreator创建。项目移至Qt 5.18 Debain环境下报错。
  2. 在原环境下创建一个简单c++动态库联合编译工程,移植成功;
  3. 在原环境下创建一个包含QT c++动态库联合编译工程,移植成功;
  4. 移植整个项目出现问题。(包含路径正确)

网上解决方案:

https://blog.csdn.net/VicdorLin?type=ask

当在Qt 5.18 Debian环境下编译项目时,遇到‘‘’undefined reference to '__cxa_throw_bad_array_new_length@Qt_5'’错误,这通常意味着链接器在寻找与Qt相关的某个特定符号,但未能在提供的库文件(libxxx.so)或其依赖项中找到它。这个错误可能是由于以下原因导致的:

版本不匹配:尽管您确认路径正确,但是Qt版本从5.8升级到了5.18,可能存在一些内部ABI(应用程序二进制接口)的变化,导致需要不同的库函数。确保libLIB1790.so是使用与目标环境(即Qt 5.18 Debain)相匹配的Qt版本构建的。

链接顺序问题:动态链接时,链接器遵循从左到右的顺序查找符号。如果Qt相关库没有被放在正确的位置以供链接器找到所需的符号,也会产生这个问题。请检查Makefile或.pro项目的链接顺序,确保包含所有必要的Qt库,比如-lQtCore -lQtGui -lQtWidgets等,并且它们出现在libLIB1790.so之前。

缺失链接标志:确保在编译和链接步骤中包含了正确的Qt库路径和链接标志。例如,在.pro文件中添加类似如下内容:

QT += core gui widgets # 或者其他需要的模块 LIBS += -L/home/动态库路径 -l动态库 -lQt5Core -lQt5Gui -lQt5Widgets
库本身的问题:检查libLIB1790.so是否正确构建并包含了所有依赖项。如果该库也依赖于Qt,那么它应该在构建时就链接了相应的Qt库。

解决步骤可以按照以下进行:

确认libxxx.so是在Qt 5.18环境下构建的。
检查并修改Makefile或.pro文件中的链接顺序和链接库路径,确保Qt库被正确链接。
如果库由CMake管理,请确保CMakeLists.txt中包含了对Qt库的正确查找和链接。
通过以上排查和修正后,重新编译项目看是否解决了链接错误。

我最终解决方案

下载QT5.8的环境,删除项目中QT5.15.8的编译文件和工程文件,重新选择5.8的库进行编译。

在这里插入图片描述
在QTcreator中,配置kits时在QT vrsion中手动添加QT5.8的qmake路径,保存后在编译时选择Qt5.8即可。

**注意** qmake 的路径一般为 : /QT安装路径/Qt5.8.0/5.8/gcc_64/bin/qmake

需要安装老版本QT官网找不到资源的,可以参考如下博主整理的资料

QT下载

  • 57
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值