CMake / Ninja 构建 Qt 项目报 undefined reference to __imp__ 错误的解决方法

一个确定没有语法错误的QT项目(使用 QT Creator 可运行),在本地使用命令行手动构建时报"undefined reference to `__imp___argc'"错误:

由于项目可以在 QT Creator 上正常运行,怀疑大概率是构建和编译工具的版本问题。检查了一下 QT 6.10.1 自带的 CMake、Ninja、MinGW 本地安装的这三个工具的版本:

工具 QT 6.10.1 集成的版本 本地独立安装的版本
CMake 3.30.5 4.2.3
Ninja 1.12.1 1.13.2
MinGW 1.13.1 15.2.0

为了验证猜测,把系统中原来指向本地安装版本的环境变量全部改为了 QT 安装目录下的集成版本,然后程序就是不再报错了。

原 PATH 变量中的三个工具的路径配置(本机配置,注意替换路径):

复制代码
C:\Lib\CMake\bin
C:\Lib\mingw64\bin
C:\Lib\Ninja

修改为 QT 集成的三个工具的路径配置(本机配置,注意替换路径):

复制代码
C:\Lib\Qt\Tools\CMake_64\bin
C:\Lib\Qt\Tools\Ninja
C:\Lib\Qt\Tools\mingw1310_64\bin

结论:

既然是版本不匹配,就没有必要纠结。如果工作内容是开发 QT 应用,那么使用 QT 集成的版本为好,虽然它们都落后于当前最新版本,但 QT 集成它们应该是做过很多测试的,运行 QT 应用的兼容性会更好一些。如果还要开发其他类型的 C++ 应用,需要更新的版本,可以考虑编写一个 BAT 脚本自动切换这些路径值。

相关推荐
blasit2 天前
笔记:Qt C++建立子线程做一个socket TCP常连接通信
c++·qt·tcp/ip
范特西.i7 天前
QT聊天项目(8)
开发语言·qt
枫叶丹47 天前
【Qt开发】Qt界面优化(七)-> Qt样式表(QSS) 样式属性
c语言·开发语言·c++·qt
十五年专注C++开发7 天前
Qt deleteLater作用及源码分析
开发语言·c++·qt·qobject
kangzerun7 天前
SQLiteManager:一个优雅的Qt SQLite数据库操作类
数据库·qt·sqlite
金刚狼887 天前
qt和qt creator的下载安装
开发语言·qt
追烽少年x7 天前
Qt中使用Zint库显示二维码
qt
谁刺我心7 天前
qt源码、qt在线安装器镜像下载
开发语言·qt
金刚狼887 天前
在qt creator中创建helloworld程序并构建
开发语言·qt
扶尔魔ocy8 天前
【转载】QT使用linuxdeployqt打包
开发语言·qt