多读书多实践,勤思考善领悟

龙芯硬件平台使用源码安装Qt5.15.2

Qt是一个跨平台的 C++ 开库,主要用来开发图形用户界面(Graphical User Interface,GUI)程序。Qt 5.15及之后的版本都取消了离线安装的方式,只能使用安装器在线安装或编译Qt源码,龙芯硬件平台自然只能通过编译Qt源码。

操作环境

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
                            root@ceprei-pc
OS: Loongnix 20 DaoXiangHu
Kernel: mips64 Linux 4.19.167-rc4.lnd.3-loongson-3
##### Uptime: 1h 18m
####### Packages: Unknown
##O#O## Shell: 4792
####### Resolution: 1920x1080
########### DE: MATE 1.20.2
############# WM: Metacity (Marco)
############### GTK Theme: 'Menta' [GTK2/3]
################ Icon Theme: menta
################# Font: Cantarell 11
##################### CPU: Loongson-3A R3 (Loongson-3A3000) @ 4x 1.45GHz [40.0°C]
##################### GPU: AMD CAICOS (DRM 2.50.0 / 4.19.167-rc4.lnd.3-loongson-3, LLVM 7.0.1)
################# RAM: 569MiB / 7771MiB

下载Qt源码

Qt源码:https://download.qt.io/archive/qt/5.15/5.15.2/single/qt-everywhere-src-5.15.2.tar.xz

1
2
[root@localhost local] wget https://download.qt.io/archive/qt/5.15/5.15.2/single/qt-everywhere-src-5.15.2.tar.xz
tar -vxf qt-everywhere-src-5.15.2.tar.xz

把Qt源码解压在/usr/local/qt-everywhere-src-5.15.2

依赖安装

按照Qt官方文档挨个安装。

如:apt-get install libXrender*

全部安装后,执行下面命令检查安装情况:

1
2
3
[root@localhost qt-5.15.2] sudo apt-get install '^libxcb.*-dev' libx11-xcb-dev \
libglu1-mesa-dev libxrender-dev libxi-dev \
libxkbcommon-dev libxkbcommon-x11-dev

按照情况逐一处理因为依赖包版本不同或其它情况导致未成功安装的包。这些包可以先去网络查找是否有编译好的包(推荐在debian官网查找包),然后再去下载源码进行编译。

1
2
3
4
5
6
7
8
9
[root@localhost qt-5.15.2] apt-cache search libSM
#在软件仓库找安装包

[root@localhost qt-5.15.2] ldconfig -p|grep libSM
#ldconfig是一个动态链接库管理命令,其目的为了让动态链接库为系统所共享。
#默认搜寻/lilb和/usr/lib,以及配置文件/etc/ld.so.conf内所列的目录下的库文件。

[root@localhost qt-5.15.2] dpkg -i libxkbcommon-x11-0_1.0.3-2_mips64el.deb
#安装包的方法

添加设备支持

正常来说,不做任何修改就编译是会报错的,大概是”qtbase_src_make faild“,具体我就不找了,原因就是没有对设备进行支持。

好在Qt已经提供了两款mips的板卡支持,所以只需要复制一份,然后改改配置就能用了。复制/usr/local/qt-everywhere-src-5.15.2/qtbase/mkspecs/devices/linux-mipsel-ci20-g++。

可以看到我添加的板卡支持是:linux-mips64el-3000-g++

修改其中qmake.conf的配置,我的修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#
# qmake configuration for building with mips-mti-linux-gnu-g++
# build for CI20 targets X11
#

# 修改下面编译器的配置
CROSS_COMPILE = mips64el-linux-gnuabi64-

include(../common/linux_device_pre.conf)

QMAKE_CFLAGS = -EL -march=mips64r2
QMAKE_CXXFLAGS = $${QMAKE_CFLAGS}
QMAKE_LFLAGS = -EL

# 添加板卡名称在此定义
BRCM_PLATFORM = 3A3000

QT_QPA_DEFAULT_PLATFORM = xcb

QMAKE_LIBS_EGL = -lEGL -lIMGegl -lusc
QMAKE_LIBS_OPENGL_ES2 = -lGLESv2 $${QMAKE_LIBS_EGL}

include(../common/linux_device_post.conf)

load(qt_config)

configure

然后就是配置生成Makefile

1
2
3
4
5
6
[root@localhost qt-5.15.2] mkdir build && cd build
#构建编译路径

[root@localhost qt-5.15.2] ../configure -v -device linux-mips64el-3000-g++ \
-opensource -confirm-license -optimized-qmake -reduce-exports \
-release -qt-pcre -system-xcb -bundled-xcb-xinput -make libs

其中-qt-xcb是必须要指定的,或者指定-no-xcb,那么就必须系统里面有可用的xcb的东西,具体看xcb的官网XCB

configure参数说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
-prefix 生成目标库的目录

-release 生成release版本 -debug 生成debug版本 -debug-and-release生成debug和release版本

-opensource 编译开源版 -commercial 编译商业版 (参数可选)

-static 生成静态库lib文件 -shared 生成动态库dll文件 (参数可选,默认是shared/*** 注:静态库与动态库区别是在生成目标文件的链接方式上,静态库采用静态链接,在生成的目标文件(如.exe文件)中会包含库文件代码,而动态库在程序编译时并不会被连接到目标代码中,而是在程序运行时才被载入。***/

-force-debug-info 强制生成调试信息 (参数可选)/*** 这个参数是让Qt release版本也生成.pdb文件。这个文件有什么作用呢?它就是我们在release版本下设置了异常捕获信息函数,打印出错堆栈信息所必须的文件。如果程序没用开启异常捕获选项,是不需要开启这个参数的。***/

-opengl dynamic 指定opengl库 (参数可选) /*** 关于这个参数说明请参考doc.qt.io/qt-5/windows-requirements.html ***/

OpenGL(全写Open Graphics Library)是指定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维图像(二维的亦可),是一个功能强大,调用方便的底层图形库。

OpenGL™ 是行业领域中最为广泛接纳的 2D/3D 图形 API,其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序。OpenGL™ 是独立于视窗操作系统或其它操作系统的,亦是网络透明的。在包含CAD、内容创作、能源、娱乐、游戏开发、制造业、制药业及虚拟现实等行业领域中,OpenGL™ 帮助程序员实现在 PC、工作站、超级计算机等硬件设备上的高性能、极具冲击力的高视觉表现力图形处理软件的开发。

-platform win32-msvc 目标库运行平台

-skip 跳过该模块

-nomake 不编译该模块

-mp 启动多核编译

注:-skip和-nomake都可省略,但是-skip qtwebengine这个参数不能省略,qtwebengine模块有需要依赖的库,这里不跳过编译会失败。

make

然后会提示使用make之类的工具进行安装,我这里提示我使用gmake,为了编译快一点,我运行了gmake -j8

编译通过以后再运行make installgmake install进行安装,最后会安装在/usr/local/Qt-5.15.2。

在/usr/local/Qt-5.15.2/bin目录执行./qmake -v可以看到安装成功。

1
2
3
4
5
[root@localhost qt-5.15.2] make -j8

[root@localhost qt-5.15.2] make install

[root@localhost qt-5.15.2] cd /usr/local/Qt-5.15.2/bin

配置环境变量

然后配置环境变量以便常用,添加如下两句到当前系统用户目录的.bashrc中,对应路径自行修改即可。

1
2
3
4
5
6
7
[root@localhost qt-5.15.2] vim /root/.bashrc
#添加下面内容:
export LD_LIBRARY_PATH=/usr/local/Qt-5.12.10/lib/:$LD_LIBRARY_PATH
export PATH=/usr/local/Qt-5.12.10/bin:$PATH

[root@localhost qt-5.15.2] source /root/.bashrc
#执行上面命令,使修改立即生效

然后在任何地方都可以使用了。

安装qtcreator

下载qt官方qtcreator源码 ,Qt设计师源码在上面下载Qt里有,也可以独立下载Qt设计师的源码 。编译Qt设计师和编译Qt Creator,都要确保使用的Qt版本与之配套,否则会出错。如果不想通过编译源码安装qtcreator ,可以安装龙芯社区低版本apt-get install qtcreator,或下载debian官方的软件包安装。

编译qtcreator4.15.1的依赖环境:

  • 至少Qt 5.14.0
  • Qt WebEngine 模块
  • 至少GCC 7
  • 至少LLVM/Clang 10(推荐LLVM/Clang 11)
  • CMake
  • Ninja (推荐)

1.编译 LLVM/Clang

下载及编译LLVM/Clang。

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost local] git clone -b release_110-based --recursive https://code.qt.io/clang/llvm-project.git
[root@localhost local] cd llvm-project
[root@localhost llvm-project] mkdir build
[root@localhost llvm-project] cd build

[root@localhost build]cmake \
-D CMAKE_BUILD_TYPE=Release \
-D LLVM_ENABLE_RTTI=ON \
-D LLVM_ENABLE_PROJECTS="clang;clang-tools-extra" \
-D CMAKE_INSTALL_PREFIX=/usr/local/llvm \
/usr/local/llvm-project/llvm
[root@localhost build]cmake --build . --target install -j 8

2.安装Ninja

1
[root@localhost build] apt-get install ninja*

3.编译qttools

只需要编译src.pro工程。

4.编译qtcreator

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@localhost qt-creator-opensource-src-4.15.1] mkdir build
[root@localhost qt-creator-opensource-src-4.15.1] cd build

#使用Ninja编译
[root@localhost build] cmake] cmake -DCMAKE_BUILD_TYPE=Debug \
-G Ninja "-DCMAKE_PREFIX_PATH=/usr/local/Qt-5.15.2;/usr/local/llvm" \
/usr/local/qt-creator-opensource-src-4.15.1
[root@localhost build] cmake --build . -j 24

#不使用Ninja编译
[root@localhost build] cmake] cmake -D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_PREFIX=/usr/local/qtcreator-4.15.1 \
-D CMAKE_PREFIX_PATH="/usr/local/Qt-5.15.2;/usr/local/llvm" \
/usr/local/qt-creator-opensource-src-4.15.1
[root@localhost build] cmake --build . --target install -j 24

配置qtcreator

  1. 设置选项\Kits\Qt Versions,添加Qt-5.15.2,即选择/usr/local/Qt-5.15.2/bin/qmake。
  2. 设置选项\Kits\Kits,添加Qt-5.15,Qt版本选择Qt-5.15.2