公司项目中的代码在VStudio2022中编写,交给我需要移植Linux的Qtcreator中,记录一下移植过程中的遇到的坑,按照错误顺序由高到低记录一下,边尝试边解决边记录,写作方面没有逻辑,每个人项目环境不一样,多找多试!
错误: C1083: 无法打开包括文件: “../../../qtmqtt/src/mqtt/qmqttclient.h”: No such file or directory
错误原因:Qt的QtMqtt模块配置错误,路径和文件错误。
解决方案参考教程:
错误:error: C1083: 无法打开包括文件: “QtMqtt/QMqttClient”: No such file or directory
错误:: error: C1083: 无法打开包括文件: “json/reader.h”: No such file or directory
错误原因:Qtcreator的读取目录的路径不一致,设置正确的头文件路径。
解决:头文件应修改为正确路径下:#include <include/json/reader.h>
错误: error: 'StdAfx.h' file not found <U+FEFF>#include "StdAfx.h"
错误原因:引用头文件没有大小写,在vstudio中不报错,Qtcreator中报错,例如还有下面的Qtime应改成QTime。注意在Visual Studio中,引用头文件时通常不区分大小写,但是在C++中大小写敏感是一种语言特性,所以养好习惯哟!
错误: Could not decode "resource.h" with "UTF-8"-encoding. Editing not possible.
错误原因:windows和Linux的编码格式不一致,在Windows平台下,默认的汉字编码格式是GBK(gb2312), Linux系统通常使用UTF-8编码格式。
解决方案:
QT界面:Error: Could not decode “*.cpp“ with “UTF-8“ - encoding. Editing not possible-CSDN博客
错误:fatal error: 'atlstr.h' file not found #include <atlstr.h>
错误原因:项目在Vstudio中引用了下面的msvc的头文件,但是linux中只有Gcc的编译器,没有msvc的头文件。
解决方案:
1、将引用的msvc的头文件作为Qt工程外的include中头文件全部添加项目;(错误,行不通)
解释:msvc的头文件中有许多windows的关键字,GCC无法识别,导致报错会更多
2、注释MSVC引用,部分手工代替写(下下策,没有找到合适的方法了)
参考:Qt添加工程外的头文件和库的理解_qt工程文件为什么要添加-CSDN博客
错误:QtMqtt/QMqttClient: No such file or directory #include <QtMqtt/QMqttClient>
错误原因:linux的Qt没有安装QtMqtt模块。
解决方案:Qtmqtt编辑后的lib库文件加入到项目中,也就是将lib格式文件换成so格式文件,通过Qtcreator添加外部库就行。
错误:error: /opt/Qt5.12.9/5.12.9/gcc_64/lib/libQt5Network.so: No such file or directory
错误原因:不清楚,项目Qt版本为Qt5.14的,现在ubuntu安装的是Qt5.15的,报错是这个版本原因有点确认!
找到了找到了!重新理了一遍,发现是添加动态库lib中模块使用了Qt5.12.9的,动态库是从其他机器上考过来的,建议最好自己编译生成!
其他修改内容:
-
修改条件编辑
由#ifdef Win32修改为#ifdef __linux__
- 引用文件大小写名称
vstudio中引用文件的时候大小写不敏感,在Qtcreator中对引用名称是敏感的,这个报错编译器很快就能检查出来,不过C++是大小写敏感特性,平常写代码的时候就要注意,不然给后期留麻烦!
- 编译器的过渡
项目中在vstudio中使用了msvc中的一些库,这个部分也是在移植过程中最难解决了,MSVC是微软针对windows的开发库,ubuntu中没有这些库呀,本想着直接将头文件一起引过去,重点是这些库只能在windows用,对这些引用MSVC的库全部处理,能注释就注释,能改写就改写!后面项目推荐GCC编译器哦!
- 代码改写
这部分根据项目移植的要求进行部分移植就可。
最后,项目环境移植成功了,花费一个礼拜左右,问题记录有些没有全部记录,重点解决问题为先了,请根据实际情况参考。