上周遇到一个难题,在龙芯上面运行qt,网上对arm的讲解时非常多的,但是龙芯mips的交叉编译却说的十分的少,现在感觉对此比较了解,所以特意写一篇博客,如果有什么不对的地方,欢迎指正
首先说下自己的环境ubuntu kylin 64
首先是龙芯的交叉编译的下载,在龙芯的开源社区里面就能够找到。里面有详细的环境配置说明。
然后时qt我们可以在官网上面下载源码
http://mirrors.ustc.edu.cn/qtproject/official_releases/qt/5.5/5.5.1/single/
这里我们选着qt-everywhere-opensource-src-5.5.1.7z ,因为他下下来比较小嘛。。
tar -xvf qt-everywhere-opensource-src-5.5.1.7z ,你会发现解压不了,我们因为7z的压缩格式我们需要特定的解压软件
sudo apt-get install p7zip
7za x qt-everywhere-opensource-src-5.5.1.7z -r -o./
当然在安装完p7zip 后我们也可以使用图形界面中的右击提取了
cd qt-everywhere-opensource-src-5.5.1
ls
我们首先要修改 qmake.cnf
gedit qt-everywhere-opensource-src-5.5.1/qtbase/mkspecs/devices/linux-mipsel-broadcom-97425-g++/qmake.cnf
这我贴下我的修改方式
#
# 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)
保存退出,回到qt-everywhere-opensource-src-5.5.1
这里我们需要简单来配置qt的编译。我们可以按需要编译自己想要的东西。
./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
注意上面的并没有安装xcb(在图形界面中显示需要用到库),和tslib(触摸屏库)
如果需要tslib,请先交叉编译tslib
xcb也是同样的
然后make -j4&&make install
3个小时左右的时间吧编译完成,
下面我们需要在qt中添加qmake
在qt的tools->options->Build & run
Qt Versions 里面add 我们刚刚编译出来的qmake
Compilers 里面add 我们的龙芯交叉编译工具g++
这里我们可以写一个简单的小程序
编译,你会发现调试界面显示
@H_404_118@Failed to start program. Path or permissions wrong?
不能打开这个软件,因为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
是龙芯的mips,我们需要吧我们交叉编译的库,还有这个简单的qt 编译出来的可执行程序放到龙芯下面。
这里我们先说,字符界面。
//------------------
这里我们放在/usr/local/下面
配置下环境
vi /etc/profile
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
reboot
重启
./mips_qt_demo
成功了,你的测试demo运行成功。
唯一美中不足的就是,不能点击图标,现在想起来之前的tslib库了么,在./configure 里面添加 -qt-tslib 和交叉编译后的tslib库和头文件。
//-------------------------
下面时图形界面,因为有些龙芯终端买购买过来已经带了国产的操作系统。而且在字符界面有些事情变得很难办到,比如说视频播放
但是照着上面的方式编译后我们在执行程序的时候,你会发现
This application Failed to start because it could not find or load the Qt platform plugin "xcb".
Reinstalling the application may fix this problem.
提示我们缺少xcb插件,我查看plugins下面确实没有xcb 插件。
下面我们需要交叉编译我们的xcb 这个在我的另一篇博客中查看
然后就是和tslib一样在./configure 里面添加-qt-xcb,还有交叉编译后的xcb的库文件和头文件。
带图形界面中使用了。
最后说一句。
或者这里你可以做之前的某步做不到,你可以直接在qt 源代码中下载qt 4.8.6的那个可以在龙芯图形界面上面本机编译qt,但这个时间会比较的长,需要6个小时多吧。
这里说明下,本机编译的话,如果时默认设置,有些东西可能不会编译,比如显示字体的fontconfig 就不能编译进去。对字体就无法进行修改或者字体根本就是空。
可以查看我的另一篇博客,交叉编译fontconfig