1硬件&需求,licheepi_nano一块(其实什么板子都不重要能上linux能驱动LCD就可以了),环境虚拟机Ubuntu18.04 文字有点长整个过程其实用不了多少时间
我这是一次就通过了也没啥大毛病,比想象中的简单多了。
上面就是我的渣渣板了,屏幕好像是野火的一块电容屏,整了一个块板子给连上还挺好用,这都不是重点。
2.新建个目录然后下载wget http://mirrors.sohu.com/qt-all/archive/qt/4.8/4.8.7/qt-everywhere-opensource-src-4.8.7.tar.gz
这是QT的包,你如果不想要4.8.7那你可以下载其他版本的,当然其他版本的配置可能就不同了,不过大体是这样,别问我为什么用4.8.7因为我
刚好有这个的项目需求,咱只说过程。 tar -xzvf qt-everywhere-opensource-src-4.8.7.tar.gz 解压。
3.进入qt源码包跟目录,然后编辑vim mkspecs/linux-arm-gnueabi-g++/qmake.conf 然后修改成你自己的编译工具链我这里用的是arm-none-linux-gnueabi所以我统一修改
修改前
修改后
4.配置 这里实际肯定是需要g++来编译qmake的不过我相信能搞qt了工具链这些肯定会装的就不多说了。QT根目录运行如下命令。
./configure -release -xplatform linux-arm-gnueabi-g++ -prefix /opt/qt4.8.7_armlib -opensource -confirm-license -qt-sql-sqlite -qt-gfx-linuxfb -plugin-sql-sqlit -no-qt3support -no-phonon -no-svg -no-webkit -no-javascript-jit -no-script -no-scripttools -no-declarative -no-declarative-debug -qt-zlib -no-gif -qt-libtiff -qt-libpng -no-libmng -qt-libjpeg -no-rpath -no-pch -no-3dnow -no-avx -no-neon -no-openssl -no-nis -no-cups -no-dbus -embedded arm -platform linux-g++ -little-endian -qt-freetype -no-opengl -no-glib -nomake demos -nomake examples -nomake docs
简单说明下,如果需要知道详细可以./configure --help
-release:编译的是release版本
-xplatform: 指定交叉编译器配置的目录(读取里面的qmake.config。里面我们修改了编译工具,就是你编译运行的最终库是在什么平台(我们这里是arm上)运行的。)
-platform: 我这里没加因为默认是linux-g++。这个不要和上面那个混淆了,这个是编译qmake用的,因为需要使用qmake来生成qt的工程和makefile。其实就是指定你交叉编译的平台主机,简单说明就是你写程序和编译程序的平台。
-prefix:指定安装目录,根据自己喜好。
-opensource:表示开源许可
主要的也就是这几个关键的东西了
5.make -j8 这个后面这个8可以 windows下任务栏 性能CPU,看有几个逻辑处理器 就用几个,这样编译的快。虚拟机的话可能看分配了几个吧。
6.安装库make install 这样就会拷贝编译好的库到你prefix 指定的目录下。 结果如下图
7.qt库目录下有个bin里面有个qmake这好东西记住了,然后lib下就是编译的arm下的一些动态库了,这个我们等会要拷贝到荔枝派上的。
8. 然后随便在哪新建个目录 mkdir helloworld 然后创建个hello.cpp输入如下代码:
#include<QApplication>
#include<QLabel>
int main(int argc, char** argv)
{
QApplication app(argc,argv);
QLabel *label = new QLabel("Hello wyhcan!");
label->setGeometry(300,100,200,200);
label->show();
return app.exec();
}
然后就的用上我们上面说的qmake了。没有加入查找目录就带上路径运行qmake
在hello.cpp 目录下
1. qmake -project 生成helloworld.pro 这个名字是根据你的工程目录名字来命令的
2. qmake helloworld.pro 生成Makefile
3. make 生成可运行程序helloworld
9.最后将 prefix 你指定库目录下的lib里的所有文件拷贝到荔枝派的linux根目录的lib下,这里还有一个库 就是libstdc++.so.6这个c库也需要拷贝,至于这个文件就在你指定的工具链的lib里面 具体可以使用find 搜索到。最后拷贝记得把你的运行程序helloworld也拷贝到你的开发板上。
上电运行./heloworld -qws。
然后你可能会遇到 Cannot create semaphore /tmp/qtembedded -0的错误这是因为Qt需要用到 System V IPC进程通讯,这个时候你需要重新配置内核搜索 System V IPC 然后开启重新编译更换内核,正常情况下这个选项应该是在General setup里面。
10.搞好再运行。
离线
早想要这种帖子,大神66666666
离线
太强了,膜拜大佬,太需要这方面的学习了!
离线
早想要这种帖子,大神66666666
神水贴,你这QQ注册可真行
离线
真强大,简洁明了。马上试下去。
离线
请问,我将可执行程序拷贝到板子上执行,发现提示找不到文件
# ./test_qt
-sh: ./test_qt: not found
#
但是实际上文件是在根目录的,
# ls
bin lib32 mnt run test_qt var
dev linuxrc opt sbin tets2
etc lost+found proc sys tmp
lib media root test usr
是什么原因呢,方便看看吗?
离线
请问,我将可执行程序拷贝到板子上执行,发现提示找不到文件
# ./test_qt -sh: ./test_qt: not found #
但是实际上文件是在根目录的,
# ls bin lib32 mnt run test_qt var dev linuxrc opt sbin tets2 etc lost+found proc sys tmp lib media root test usr
是什么原因呢,方便看看吗?
我把相同的代码用ubuntu的qmake编译后是可以执行的。
并且lib文件夹下也都把需要的文件复制进去了,是不是还需要配置什么东西,环境变量或者别的。
离线
写得很详细,多谢楼主。抽空去试下。
离线
这种手把手的经验很好用!
离线
卓林 说:请问,我将可执行程序拷贝到板子上执行,发现提示找不到文件
# ./test_qt -sh: ./test_qt: not found #
但是实际上文件是在根目录的,
# ls bin lib32 mnt run test_qt var dev linuxrc opt sbin tets2 etc lost+found proc sys tmp lib media root test usr
是什么原因呢,方便看看吗?
我把相同的代码用ubuntu的qmake编译后是可以执行的。
并且lib文件夹下也都把需要的文件复制进去了,是不是还需要配置什么东西,环境变量或者别的。
看看是不是权限问题,粗暴一点,chmod 777 xxx
最近编辑记录 LinjieGuo (2021-01-18 16:52:57)
离线
卓林 说:卓林 说:请问,我将可执行程序拷贝到板子上执行,发现提示找不到文件
# ./test_qt -sh: ./test_qt: not found #
但是实际上文件是在根目录的,
# ls bin lib32 mnt run test_qt var dev linuxrc opt sbin tets2 etc lost+found proc sys tmp lib media root test usr
是什么原因呢,方便看看吗?
我把相同的代码用ubuntu的qmake编译后是可以执行的。
并且lib文件夹下也都把需要的文件复制进去了,是不是还需要配置什么东西,环境变量或者别的。看看是不是权限问题,粗暴一点,chmod 777 xxx
试过了,还是一样的。需不需要再文件系统中添加qt支持呢?我并没有做
离线
应该是我编译器的问题,我用编译qmake时天际的编译器编译一个helloword,也是not found,我再找找编译器吧,现在这个时编译v3s的
离线
应该是我编译器的问题,我用编译qmake时天际的编译器编译一个helloword,也是not found,我再找找编译器吧,现在这个时编译v3s的
你这个是识别不了你的程序吧?这里你使用的编译器得和你生成文件系统那个编译器是一样的才行。如果你用buildroot的话那么你就用编译buildroot使用的那个编译器来编译qt程序。
离线
卓林 说:应该是我编译器的问题,我用编译qmake时天际的编译器编译一个helloword,也是not found,我再找找编译器吧,现在这个时编译v3s的
你这个是识别不了你的程序吧?这里你使用的编译器得和你生成文件系统那个编译器是一样的才行。如果你用buildroot的话那么你就用编译buildroot使用的那个编译器来编译qt程序。
我是这么想的,可是buildroot下边没有g++的编译器,即使我添加了c++的支持
离线
buildroot制作根文件系统的时候有两种选择,一种是使用buildroot自己的编译器,还有就是可以自己提供自己下载的编译器然后指定编译器的路径。坑网应该是有这个教程的。如果你说你编译buildroot的编译工具没有g++的话那你只能换一个编译工具编译buildroot了。arm-linux就有arm-linux-g++吧。
离线
buildroot制作根文件系统的时候有两种选择,一种是使用buildroot自己的编译器,还有就是可以自己提供自己下载的编译器然后指定编译器的路径。坑网应该是有这个教程的。如果你说你编译buildroot的编译工具没有g++的话那你只能换一个编译工具编译buildroot了。arm-linux就有arm-linux-g++吧。
是的,昨天已经把arm-linux-g++生成出来了,qmake编译过了,然后。。。用生成的g++编译c程序试了试,结果原来编译可以运行的c程序也是not found了。醉了。。,不过还想请教一个问题,把烧录系统的sd卡挂载再ubuntu里,直接往文件系统里边复制文件,应该没问题吧?
离线
666
离线
是的,昨天已经把arm-linux-g++生成出来了,qmake编译过了,然后。。。用生成的g++编译c程序试了试,结果原来编译可以运行的c程序也是not found了。醉了。。,不过还想请教一个问题,把烧录系统的sd卡挂载再ubuntu里,直接往文件系统里边复制文件,应该没问题吧?
这几天比较忙,没看。原来编译的C程序用arm-linux-再重新编译下就行了。只要识别了文件系统拷贝是肯定没问题的,而且这种问题亲测一下马上就知道了不是么=。=
最近编辑记录 vip888888 (2021-01-22 09:29:10)
离线
哈哈,感谢感谢,已经弄出来
离线
有大佬提供一下镜像不。。。
离线
这个帖子非常详细。 感谢分享, 我正在搞全志的QT5, 遇到不少问题, 一个一个解决了,还是卡在一个地方。
看来我还是先看看QT4能不能搞定
离线
我按这个操作https://en.wiki.sipeed.com/soft/Lichee/zh/Nano-Doc-Backup/build_sys/onekey.html
没有权限执行
Starting logging: OK
Initializing random number generator... done.
Welcome to Lichee Pi
Lichee login: root
Password:
Login incorrect
Lichee login: licheepi
Password:
Login incorrect
Lichee login: root
Password:
# ls
littlevgl_demo
# ./littlevgl_demo
-sh: ./littlevgl_demo: Permission denied
# chmod 777 littlevgl_demo
# ./littlevgl_demo
-sh: ./littlevgl_demo: Permission denied
# ls
littlevgl_demo
# cd /user/bin
-sh: cd: can't cd to /user/bin
# ls
littlevgl_demo
# pwd
/root
离线
大佬,我也想玩QT呀。可是目前还卡在驱动LCD屏上面。泪目
离线