尽管有 core5compat 和 QT_DISABLE_DEPRECATED_BEFORE,Qt 5 项目仍无法在 Qt 6 中编译

问题描述 投票:0回答:1

在更新 Ubuntu 时出现一些混乱之后,我的计算机最近在 Debian 12 上进行了全新安装。 我重新安装了 Qt Creator 和 Qt6.6。两周前,我在之前的安装中打开了几个曾经在 Qt5.something 下工作的旧项目(我认为它是 5.15,但我无法验证它)。 当尝试使用 qmake 构建它们时,它们将不再编译并抛出数百个错误,所有错误都带有对核心库的未定义引用,包括 QByteArray、QDateTime、QString...

Google 搜索问题后,我通过 Qt Manager 下载了 Qt5 兼容性模块,然后继续添加

QT += core5compat
到我的 .pro 并尝试使用或不使用
DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x050F00
以及 C++11 或 C++17

这并没有改变结果。 我是不是错过了什么?

编译期间引发的典型错误(在本例中,我们谈论的是 500 行代码中的 1030 个错误,而不是代码本身)看起来像

:-1: error: /home/pathToProjects/ScarTest/../build/simbaLib/Desktop/Debug/libsimbaLib.a(crc8message.o): in function `CRC8Message::basecmd()':
/home/pathToProjects/simbaLib/crc8message.cpp:11: error: undefined reference to `QByteArray::QByteArray(char const*, int)'
:-1: error: /home/pathToProjects/ScarTest/../build/simbaLib/Desktop/Debug/libsimbaLib.a(crc8message.o): in function `QArrayData::sharedNull()':
/usr/include/x86_64-linux-gnu/qt5/QtCore/qarraydata.h:122: error: undefined reference to `QArrayData::shared_null'
:-1: error: /home/pathToProjects/ScarTest/../build/simbaLib/Desktop/Debug/libsimbaLib.a(crc8message.o): in function `QByteArray::detach()':
/usr/include/x86_64-linux-gnu/qt5/QtCore/qbytearray.h:501: error: undefined reference to `QByteArray::reallocData(unsigned int, QFlags<QArrayData::AllocationOption>)'
:-1: error: /home/pathToProjects/ScarTest/../build/simbaLib/Desktop/Debug/libsimbaLib.a(crc8message.o): in function `QByteRef::operator=(char)':
/usr/include/x86_64-linux-gnu/qt5/QtCore/qbytearray.h:542: error: undefined reference to `QByteArray::expand(int)'
:-1: error: /home/pathToProjects/ScarTest/../build/simbaLib/Desktop/Debug/libsimbaLib.a(crc8message.o): in function `QTypedArrayData<char>::deallocate(QArrayData*)':
/usr/include/x86_64-linux-gnu/qt5/QtCore/qarraydata.h:228: error: undefined reference to `QArrayData::deallocate(QArrayData*, unsigned long, unsigned long)'
:-1: error: /home/pathToProjects/ScarTest/../build/simbaLib/Desktop/Debug/libsimbaLib.a(qftp.o): in function `QFtpDTP::read(char*, long long)':
/home/pathToProjects/simbaLib/qftp.cpp:376: error: undefined reference to `QByteArray::remove(int, int)'
c++11 c++17 qt5 backwards-compatibility qt6
1个回答
0
投票

虽然 Qt6 引入了很多错误和令人讨厌的 API 更改,但我认为,您的主要问题是 Qt5 内置库和 Qt6 源代码的组合。 查看您的错误,例如

“/usr/include/x86_64-linux-gnu/qt5/QtCore/qbytearray.h:542: 错误:“

你需要把所有东西都移植到Qt6上,你不能只移植部分代码并希望获得二进制兼容性。看来simbaLib是Qt5。

© www.soinside.com 2019 - 2024. All rights reserved.