上周遇到一个难题,在龙芯上面运行qt,网上对arm的讲解时非常多的,但是龙芯mips的交叉编译却说的十分的少,现在感觉对此比较了解,所以特意写一篇博客,如果有什么不对的地方,欢迎指正@H_502_1@
首先说下自己的环境ubuntu kylin 64
@H_502_1@
首先是龙芯的交叉编译的下载,在龙芯的开源社区里面就能够找到。里面有详细的环境配置说明。@H_502_1@
然后时qt我们可以在官网上面下载源码
@H_502_1@
http://mirrors.ustc.edu.cn/qtproject/official_releases/qt/5.5/5.5.1/single/
@H_502_1@
这里我们选着qt-everywhere-opensource-src-5.5.1.7z ,因为他下下来比较小嘛。。@H_502_1@
tar -xvf qt-everywhere-opensource-src-5.5.1.7z ,你会发现解压不了,我们因为7z的压缩格式我们需要特定的解压软件@H_502_1@
sudo apt-get install p7zip@H_502_1@
7za x qt-everywhere-opensource-src-5.5.1.7z -r -o./@H_502_1@
当然在安装完p7zip 后我们也可以使用图形界面中的右击提取了@H_502_1@
cd qt-everywhere-opensource-src-5.5.1@H_502_1@
ls@H_502_1@
gedit qt-everywhere-opensource-src-5.5.1/qtbase/mkspecs/devices/linux-mipsel-broadcom-97425-g++/qmake.cnf@H_502_1@
#
# qmake configuration for linux-mipsel-broadcom-97425-g++
#
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublib
include(../../common/linux.conf)
include(../../common/gcc-base-unix.conf)
include(../../common/g++-unix.conf)
load(device_config)
# Modify the defaults we loaded above
CROSS_COMPILE = mipsel-redhat-linux-
QMAKE_CC = $${CROSS_COMPILE}gcc
QMAKE_CXX = $${CROSS_COMPILE}g++
QMAKE_LINK = $${QMAKE_CXX}
QMAKE_LINK_SHLIB = $${QMAKE_CXX}
QMAKE_AR = $${CROSS_COMPILE}ar cqs
QMAKE_OBJCOPY = $${CROSS_COMPILE}objcopy
QMAKE_NM = $${CROSS_COMPILE}nm -P
QMAKE_STRIP = $${CROSS_COMPILE}strip
QMAKE_LIBS += -lrt
load(qt_config)@H_502_1@
保存退出,回到qt-everywhere-opensource-src-5.5.1@H_502_1@
这里我们需要简单来配置qt的编译。我们可以按需要编译自己想要的东西。@H_502_1@
./configure \
-prefix /home/musx/mips_qt5 \
-confirm-license \
-opensource \
-release \
-make libs \
-xplatform devices/linux-mipsel-broadcom-97425-g++ \
-optimized-qmake \
-pch \
-qt-sql-sqlite \
-qt-libjpeg \
-qt-libpng \
-qt-zlib \
-no-opengl \
-no-sse2 \
-no-openssl \
-no-nis \
-no-cups \
-no-glib \
-no-dbus \
-no-xcursor -no-xfixes -no-xrandr -no-xrender \
-no-separate-debug-info \
-nomake examples -nomake tools -nomake tests -no-iconv
@H_502_1@
注意上面的并没有安装xcb(在图形界面中显示需要用到库),和tslib(触摸屏库)@H_502_1@
如果需要tslib,请先交叉编译tslib@H_502_1@
xcb也是同样的@H_502_1@
然后make -j4&&make install@H_502_1@
3个小时左右的时间吧编译完成,@H_502_1@
在qt的tools->options->Build & run@H_502_1@
Qt Versions 里面add 我们刚刚编译出来的qmake@H_502_1@
Compilers 里面add 我们的龙芯交叉编译工具g++
@H_502_1@
Failed to start program. Path or permissions wrong?@H_502_1@ 不能打开这个软件,因为cpu不一样,肯定打不开这个软件,在命令行里面用file 查看文件
mips_qt5: ELF 32-bit LSB executable,MIPS,MIPS64 rel2 version 1 (SYSV),dynamically linked (uses shared libs),for GNU/Linux 2.4.0,BuildID[sha1]=3cdd6387c14f3ec68c2270664458f933f9bb52b5,not stripped@H_502_1@
是龙芯的mips,我们需要吧我们交叉编译的库,还有这个简单的qt 编译出来的可执行程序放到龙芯下面。@H_502_1@
这里我们先说,字符界面。@H_502_1@
//------------------
@H_502_1@
这里我们放在/usr/local/下面@H_502_1@
配置下环境@H_502_1@
vi /etc/profile@H_502_1@
export QT_ROOT=/usr/local/qt5.5.1
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib:$QT_ROOT/lib
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts
export QT_QPA_GENERIC_PLUGINS=evdevtouch:/dev/input/event0
export PATH=/bin:/sbin:/usr/bin/:/usr/sbin
export QML2_IMPORT_PATH=$QT_ROOT/qml@H_502_1@
reboot
@H_502_1@
重启@H_502_1@
./mips_qt_demo@H_502_1@
成功了,你的测试demo运行成功。@H_502_1@
唯一美中不足的就是,不能点击图标,现在想起来之前的tslib库了么,在./configure 里面添加 -qt-tslib 和交叉编译后的tslib库和头文件。@H_502_1@
//-------------------------@H_502_1@
下面时图形界面,因为有些龙芯终端买购买过来已经带了国产的操作系统。而且在字符界面有些事情变得很难办到,比如说视频播放@H_502_1@
但是照着上面的方式编译后我们在执行程序的时候,你会发现@H_502_1@
This application Failed to start because it could not find or load the Qt platform plugin "xcb".
Reinstalling the application may fix this problem.@H_502_1@
提示我们缺少xcb插件,我查看plugins下面确实没有xcb 插件。
@H_502_1@
下面我们需要交叉编译我们的xcb 这个在我的另一篇博客中查看@H_502_1@
然后就是和tslib一样在./configure 里面添加-qt-xcb,还有交叉编译后的xcb的库文件和头文件。@H_502_1@
带图形界面中使用了。@H_502_1@
@H_502_1@
最后说一句。
@H_502_1@
或者这里你可以做之前的某步做不到,你可以直接在qt 源代码中下载qt 4.8.6的那个可以在龙芯图形界面上面本机编译qt,但这个时间会比较的长,需要6个小时多吧。@H_502_1@
这里说明下,本机编译的话,如果时默认设置,有些东西可能不会编译,比如显示字体的fontconfig 就不能编译进去。对字体就无法进行修改或者字体根本就是空。@H_502_1@
可以查看我的另一篇博客,交叉编译fontconfig @H_502_1@ 原文链接:https://www.f2er.com/ubuntu/355509.html