Qt,面向C++图形界面的一种架构,对于GUI有很好的扩展,通过近一个月的学习和摸索,终于实现了Windows下的软件代码移植到Linux,实现了软件的跨平台。这其中走了不少弯路,遇到很多问题,主要是通过Internet找资料,上论坛求助,才使得最终成功,所以这也是我写这篇博文的初衷,希望能通过自己的经验总结,能够让更多像我一样的菜鸟少走弯路,走的更远。。。

首先,介绍一下:为什么要用Qt?因为我们自己开发了一个小软件,在Windows下用C++写的代码,其中主要调用了MKL和Opengl两个库,我们的目的是想将我们的软件推广,让更多的人来使用我们的软件,那就希望除了在Windows下,在Linux(国外较多)环境下也能使用我们的软件,这就是要实现软件跨平台,那跨平台就必然涉及到了底层代码层的东西,首先要选择跨平台的工具,通过网上搜集资料,最终确定使用Qt。

其次,确定使用Qt后,光靠Qt行不行?Qt是面向对象的GUI,涉及到代码层、MKL库、Opengl库等最根本的东西时候还需要其他的工具进行辅助,那我就将我们开发使用的工具做以介绍,从代码最底层开始,在进行Qt开发时候,代码层是以静态库的形式链接到Qt的工程文件中,因此大量的底层代码都是以库的形式存在,在Windows下是以.lib形式存在,在Linux下是以.a或者.so形式存在,那么使用什么工具进行代码管理呢?我们选用的是Cmake进行代码编译生成库,其中Cmake在Windows和Linux下都能使用,Cmake的使很强大,就我个人而言,它能将.cpp以及.h等大量的代码及头文件统一管理,代码、库、头文件非常清晰明了,对于一个工程软件的理解思路很清晰,Cmake的语法很好掌握,下载Cmake的使用手册,然后按照手册中的例程走一遍,很多语法都是固定的,比如最简单的Hello Word!很多人都是从这开始学的吧,呵呵,我当时也是找了一个最简单的Hello Word!将Cmake的使用从头到尾熟悉了一遍,然后再在简单的基础上进行复杂扩展,其实只要最简单的东西熟悉了,难的也就变得简单了,因为难的是在简单的基础上迭代、扩展,基础的东西熟悉了可以少走弯路,对于Cmake我就简单介绍,具体细节可参照网上其他Cmake具体资料,我这里主要将我们跨平台的宏观大体思路进行介绍,涉及到细节的东西不做深入探讨,如果你能使用Cmake生成代码库:.lib,.a,.so那么你离成功就近了一步,那进行Windows向Linux跨平台时候,主要生成Linux下的.a和.so即可,.a是静态库,.so是动态库,下图显示成功生成了.a和.so库文件,.a和.so生成是靠代码控制。

对于Cmake进行代码生成库时候,我的经验是不用添加代码所涉及到的MKL等数学库,我理解的是Cmake只在代码层面对对软件代码进行管理和编译,它不涉及到函数功能是否实现,意思就是Cmake不管你这个函数是否能使现相应的函数功能,我只需在我Cmake 编译的时候能找到代码中出现的函数名即可,比如vslNewStream()函数,我不要求我在mkl数学库中能实现你的函数功能,我只需要在Cmake编译时,我在mkl的头文件定义中能找到vslNewStream函数名称即可,那Cmake核心要求就需要你要将代码中涉及的代码以及头文件的路径要全部加对,即Cmake语法中include_directories()是核心的东西,不能出错,Cmake成功generate之后只是说明你的Cmake工程管理代码的语法没问题,要涉及底层.cpp代码没问题,还需要在Linux用make来检验代码并生成最终的.a和.so库,cd到由Cmake生成的Build文件下,一般生成了Makefile文件,make主要是针对Makefile进行操作编译,下图表示成功生成libmose.a静态链接库。

下一步,将成功生成的libmose.a静态链接库加入到Qt工程文件中,注意,现在所加的.a静态库只是在Qt中加入了代码管理库,其相当于逻辑集成库,因此当程序代码真正要实现功能时,比如要进行函数调用时,那么现在就要加入mkl等库文件,mkl库中有.a库中代码调用相应函数功能的函数,例如上述提到的vslNewStream()函数功能的实现定义在libmkl_intel_lp64.a中,因此只需要将代码中涉及到所有函数以及变量全部统一加入到Qt工程文件中,那么整个软件工程才能统一正常运转工作。在Linux下安装Qt,我们安装的Qt版本为 QT Library: 4.8.1 QT Creator:2.4.1 Ubuntu: 12.04 ,具体安装步骤不再详述。

然后很重要,也很麻烦的一步,在Qt中添加库,由于开始对Qt不熟悉,所以在这一步卡了很长时间,主要问题还是出现在Windows代码移植到Linux环境下容易出现问题,还有就是Qt对代码要求很严格,不能出现任何细小的疏忽和错误,否则就会出现undefined referenced to' ... ',这几乎是所有初学Qt的人都要经历的过程,因为Qt对代码的苛刻,所以你代码无论出现什么问题,它都会出现上述错误,正因为非常常见,不能具体到对应代码错误,因此解决起来也很头疼,网上也给了一些解答,我觉得每个人遇到的问题都不一样,因此具体问题具体分析,通过自己深入理解代码,分析和解决undefinded reference to 这一错误。Qt对代码层面要求很苛刻,举例说明,比如当代码要调用MKL库时,.a库的调用顺序不一样都会出现错误,因此初学者一定要小心,否则你会陷入undefined referenced to 的泥潭无法自拔,比如:

程序成功运行,而当我将LIBS += 顺序变换一下时,编译就会出错。如下图:

在进行Qt工程文件添加.a库时,INCLUDEPATH += 同样重要,注意这里的路径一定要和libmose.a代码头文件路径以及调用的MKL头文件一致,否则会出错,可能会有人问为什只加入.h文件即可,原因是你Cmake,make编译生成的libmose.a中包含了.cpp代码文件,Qt中工程编译时,加入相应代码的.h头文件来定义相应的.cpp中的函数、变量定义即可,前面说到Cmake是进行代码管理打包生成代码链接库,那么在Qt中就要真正的调用函数,进行实战,我理解的是Qt是干实事的,Cmake之是做做表面工作(可能理解的不准确),那我在验证仿真程序时,是利用Qt中按钮触发事件信号槽机制来触发进行仿真程序运行,如何设置按钮触发在Qt例程中,网上有现成代码,直接copy过来就能用。

这是Qt信号槽按钮触发界面,也就是当点击yes时,信号触发连接到软件仿真程序,程序就开始运行,下图是点击yes按钮后仿真结果

那么以上调用MKl库就完成,下面要调用Opengl库进行显示,前面说实现Windows到Linux跨平台,其实最麻烦的是Opengl库中涉及到Windows.h等Windows下的系统文件如何实现在Linux下的替换和移植,我开始还幻想着通过自己写Windows.h在Linux下相应的API,结果发现工程量太大,结果放弃了,后来想直接调用Qt下的QtOpengl,因为Qt本身是针对跨平台的,因此QtOpengl就不会涉及到Windows到Linux的问题,后来通过简单调用QtOpengl实现简单显示三维圆柱体。

那么Qt实现跨平台,调用MKL、Opengl库的工作基本告一段落,下面主要是将上述仿真结果参数写入QtOpengl中,那么就实现了Linux下Qt对代码仿真、显示一体化的功能,再进行后期的代码、算法优化,即实现将Windows下的软件移植到Linux下,实现软件跨平台。

Qt,面向C++图形界面的一种架构,对于GUI有很好的扩展,通过近一个月的学习和摸索,终于实现了Windows下的软件代码移植到Linux,实现了软件的跨平台。这其中走了不少弯路,遇到很多问题,主要是通过Internet找资料,上论坛求助,才使得最终成功,所以这也是我写这篇博文的初衷,希望能通过自己的经验总结,能够让更多像我一样的菜鸟少走弯路,走的更远。。。         首先,介绍一下:为
Qt 5.12.9 多平台部署发行 系列文章目录 文章目录 Qt 5.12.9 多平台部署发行系列文章目录前言一、Window平台 Qt 运行环境部署二、 Linux (Ubuntu)平台 Qt 运行环境部署1.下载 linux deploy qt 2.安装和查看版本总结 Qt 是一个1991年由 Qt Company开发的 跨平台 C++图形用户界面应用程序开发框架,可以 实现 一次编码,多平台编译部署。 Qt 源码先由qmake生成Makefile文件,然后使用make命令进行编译,我安装的版本是 Qt 5.12.9,这里来记录
搞C++大作业,github上扒了 QT 项目,跑的时候显示找不到 windows .h,想着好久没用了,环境崩了,就去找解决方案。 恶心了我半天,本来以为是VS的问题,但是不是,最后还是环境变量的问题 网上全是C:\Program Files (x86)\Microsoft SDKs\ Windows \v7.1A\Include这个解决方法,但是我的Microsoft SDKs下面没有 Windows 这个文件夹,吐了吐了, 解决方案, 加入环境变量 D:\ Windows Kits\10\Include\10.0.1
1、sudo apt-get install clang 2、sudo apt-get install build-essential 3、sudo apt-get install lib qt 4-dev void BackgroundToDesktopUtil::moveWindowToDesktopBottom(QWidget *window) PDWORD_PTR result = nullptr; HWND hWorkerW = nullptr; HWND hDefView = nullptr; SendMess
Windows 下生成的 QT 项目移植到 Linux 下 最近在学习 QT ,记录一下 Windows 移植到 Linux 的过程以及遇到的问题 1.首先保证两系统中 QT 版本一致: 查看 Linux Qt 版本:qmake -v 若不一致,则到官网安装下载安装对应版本:https://blog.csdn.net/wuweifeng_2017/article/details/78322249 2.将 windows 下生成的项...
windows / linux Qt 可执行程序打包。 windows Qt 打包工具windeploy qt 用法。 linux Qt 依赖文件打包, linux 下桌面双击运行程序脚本编写。 windows Qt 的可执行文件打包简单的来说就是利用 Qt 自带依赖的打包工具windeploy qt 进行打包,该工具存在 Qt 安装目录下。
### 回答1: Qt 是一个 跨平台 的框架,可以在 Windows Linux 、macOS等操作系统上运行。如果你已经在 Windows 下用 Qt 开发了应用程序,并希望将其移植到 Linux 系统上,可以使用 Qt Creator来完成。 1.在 Linux 系统上安装 Qt Creator和 Qt 库。 2.在 Qt Creator中打开已经在 Windows 下开发好的工程。 3.在工程设置中配置好编译器和编译选项。 4.使用 Qt Creator编译和运行应用程序,修复任何编译错误。 5.在 Linux 系统上测试应用程序,修复任何运行错误。 注意:移植过程中可能会遇到一些平台差异性问题,例如路径分隔符、换行符等。应该在移植过程中尽量避免使用平台特定的代码。 ### 回答2: 如何将 Windows 下的 QT 项目移植到 Linux 操作系统上是很多开发者关心的问题。以下是一些步骤和注意事项,以帮助开发者将 QT 项目从 Windows 移植到 Linux 。 1. 确认 Qt 版本 首先,需要确认 Windows Linux 上的 Qt 版本是否一致,最好都是同一版本的 Qt ,以免在移植过程中出现版本不兼容的问题。 2. 确认目标 Linux 的架构 开发者需要获取目标 Linux 系统的架构信息,了解目标处理器类型和操作系统版本,以适配相关的编译器和库文件。 3. 安装 Qt 开发环境 在进行移植之前,需要在 Linux 操作系统中安装 Qt 开发环境,以编译和运行相关的代码。可以从 Qt 官方网站或者 Linux 发行版 软件 仓库中下载和安装相关的 Qt 开发环境。 4. 建立工程文件 在 Linux 系统上建立 QT 项目的工程文件,可以使用 Qt Creator等开发工具或者手动创建相关的工程文件。 5. 添加适当的库文件 为了在 Linux 上运行 QT 项目,需要添加适当的库文件和依赖项。开发者可以从 Linux 系统的 软件 仓库中获取相应的库文件来解决依赖项问题,并在项目中添加这些库文件依赖。 6. 编译和调试 在完成转移后,需要进行编译和调试,检查 QT 项目是否可以在 Linux 上正常运行。开发者可以使用 Qt Creator等工具来进行编译和调试。 总结: QT 项目从 Windows 移植到 Linux 需要考虑到版本兼容性、架构适配、库文件和依赖项等问题,但透过一个简易的流程,开发者可以在 Linux 上成功运行 QT 项目。 ### 回答3: 将 Windows 下的 Qt 移植到 Linux 可以说是一个挑战性很高的任务,涉及到很多方面的知识。以下是一些我认为需要考虑的方面和步骤。 首先, Qt 本身是 跨平台 的,这意味着移植应该是可行的。但是,由于 Windows Linux 有很多不同的特性,包括文件系统、网络通信、系统调用等等,所以我们需要对不同平台的差异有一定的了解。 其次,我们需要为目标平台编译和安装 Qt 库。在 Linux 上,我们可以使用包管理器如apt-get、yum等来获取 Qt 库,也可以从源代码编译安装。但是需要注意的是,由于不同发行版的 Linux 有不同的特性和限制,所以更好的方式是编译为静态链接库或打包为二进制包,以方便在不同的发行版上使用。 第三,在移植过程中,我们需要修改代码以适应不同的平台。比如说,在 Windows 下使用文件路径时可以用反斜杠,但在 Linux 下需要用正斜杠;在 Windows 下使用CRLF作为行分隔符,而在 Linux 下使用LF。如果代码中有使用 Windows 下特有的API,例如注册表、COM组件等,我们需要将其替换成 Linux 下的对应API或功能。 最后,在移植完成后需要进行测试和调试。可能会遇到诸如界面显示、音频设备、数据库等方面的问题,需要进行逐一排查和解决。 总之,将 Windows 下的 Qt 移植到 Linux 需要对不同平台的特性有一定了解,并熟悉 Qt 库的使用和调试技巧。如果能够认真完成这一过程,我们就能得到一个能在 Linux 下运行的、功能完备的 Qt 应用程序。
No rule to make target 'usr/lib/x86_64-linux-gnu/libcuda.so' Linux下安装OpenCV时 make编译出现的Bug