说明:继上一次移植完QT后,说写个不使用qtcreator写一个简单的程序验证QT移植情况来着,奈何一直没有合适的时间,今天它终于来了,这里也是做个记录,方便自己忘记了回来看看。本文将写一个简单的程序来验证之前一直qt的使用情况,因为不使用qtcreator ,所以主要就是使用qmake来编译工程,生成makefile进行交叉编译,得到可执行的qt文件,本文还会记录一些小编在验证过程中遇到的问题和解决办法,相信大家也可能会遇到的。
先在自己的目录下创建文件夹,我这里在/home/xjchen/fullhan/mc6670_sdk下创建一个名为 test1 的文件夹,在里面创建一个 main.cpp 的文件,编写下面的简单的 Qt 代码。
在main.cpp写入程序:
#include <QApplication>
#include <QtWidgets>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget window;
window.resize(250, 150);
window.setWindowTitle("Hello, world!");
window.show();
return app.exec();
}
在终端输入qmake编译: qmake -project
然后输入:qmake
到这里,可能会有小伙伴遇到输入qmake指令后,发现qmake找不到的情况了,如果没有那当我没说哈哈哈,实不相瞒我也遇到了,后来发现是因为直接在当前目录输入是找不到qmake的,后面我就依次去找qmake的所在的路径,可使用指令,查找它的路径
终端:find -name "qmake"
相信大家已经找到了,那么我们这就得带路径使用qmake啦!
在终端输入qmake编译: /usr/local/qt5.9/bin/qmake -project (带自己qmake所在的地址进行编译,不然会找不到qmake)
会生成一个 test1.pro 文件。test1 为我们的工程文件夹名
会生成一个 test1.pro 文件。test1 为我们的工程文件夹名
再次通过终端编译: /usr/local/qt5.9/bin/qmake (带自己qmake所在的地址进行编译)
test1 目录下又会多出来一个 Makefile 文件
在终端输入 make 进行编译,遇到错误fatal error: QApplication: No such file or directory,发现QApplication模块找不到路径
通过查找,发现QApplication确实也在/usr/local/qt5.9/include/QtWidgets的路径里面,怀疑问题是因为Makefile里面缺少了这个路径,导致找不到函数 打开Make file查看,确实如此
解决方法:手动添加上路径:-I/usr/local/qt5.9/include/QtWidgets
再次make编译,没有报前面的错误了,报了一个新的错误,是一大堆模块显示未定义,如图所示:
大概原因:libQt5Widgets.so动态链接库没有加入到编译选项里面
解决方法:在Makefile添加参数
LIBS = $(SUBLIBS) /home/ab/miniconda3/envs/myenv/lib/libQt5Gui.so /home/ab/miniconda3/envs/myenv/lib/libQt5Core.so -L/usr/lib64 -lGL -lpthread -lQt5Gui -lQt5Widgets
通过与自己的Makefile对比,发现少了,-lQt5Widgets的参数
手动添加-lQt5Widgets的参数,再次make编译,发现不在报刚刚的错误
看到以上没有报什么错,那么恭喜你,接近成功的一半了
在终端输入 make 来进行编译会生成一个 main.o 和 test1 的可执行文件。
接着:将可执行文件test1拷贝到开发板/home/public/nfsshare/xjchen/test(自己的路径)
终端输入:cp test1 /home/public/nfsshare/xjchen/test
发现开发板上面的test目录没有权限,终端输入:chmod 777 test给予操作权限
再次执行cp test1 /home/public/nfsshare/xjchen/test,拷贝成功
登录开发板
进入:cd 进入刚刚拷贝文件的路径中
输入配置环境:
export LD_LIBRARY_PATH=/nfs/xjchen/lib/lib
export QT_QPA_PLATFORM_PLUGIN_PATH=/nfs/xjchen/lib/plugins
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
export QT_DEBUG_PLUGINS=1
开发板终端输入: echo $LD_LIBRARY_PATH 查看路径配置情况
配置成功!!!!
终端输入:./test1,运行程序,运行后遇到以下错误,哎!又出现错误了,不过不要紧,继续解决
发现lib的库里面是缺少了libstdc++.so.6动态库,导致开发环境在对应的路径下找不到此库而报错 ,好那么知道原因了,就好解决了!
解决方法:去到/opt/molchip/aarch64-linux-gnu/aarch64-linux-gnu/libc/lib编译器的库里找到libstdc++.so.6,这里主要是看自己交叉编译器存储的位置,去里面找到你的交叉编译器,然后在/libc/lib里面找到libstdc++.so.6这个静态库,将其拷贝到刚刚配置的export LD_LIBRARY_PATH=/nfs/xjchen/lib/lib这个路径里面
这个时候再次运行test1文件就没有什么报错啦!
好啦!到这里也表示移植基本没有什么问题了,是能用的了。以上便是小编在移植QT和验证QT移植情况的过程中所遇到的一些情况,如果觉得对你有帮助,麻烦点个小赞哦,您的支持是我最大的动力!!!