(诛仙剑C-SKY)6-QT

作者:cp
时间:2019-05-16
申明:本文一些素材取自网络,归原作者所有

写在前面

移植基于linuxfb的QT,不建议使用吧,这里只作C-SKY也可以使用QT的证明

1.源码

1.1下载

http://download.qt.io/archive/qt/

  • 我下载的qt-everywhere-src-5.12.3.tar.xz

  • 放在C-SKY下新建的文件夹QT

1.2解压

xz -d qt-everywhere-src-5.12.3.tar.xz
tar -xvf qt-everywhere-src-5.12.3.tar

2.配置qmake.conf

  • C-SKY/QT/qt-everywhere-src-5.12.3/qtbase/mkspecs下新建文件夹linux-csky-g++,其中文件复制于linux-g++,也即:
cp -r linux-g++ linux-csky-g++
  • 编辑qmake.conf,内容如下:
#
# qmake configuration for linux-g++
#

MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib

QT_QPA_DEFAULT_PLATFORM = linuxfb:fb=/dev/fb0
QMAKE_CFLAGS_RELEASE  += -O2
QMAKE_CXXFLAGS_RELEASE += -O2

include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)

# modifications to g++.conf
QMAKE_CC                = csky-linux-gcc
QMAKE_CXX               = csky-linux-g++
QMAKE_LINK              = csky-linux-g++ -msoft-float -lrt
QMAKE_LINK_SHLIB        = csky-linux-g++ -msoft-float -lrt

QMAKE_CFLAGS += -msoft-float
QMAKE_CXXFLAGS += -msoft-float
 
# modifications to linux.conf
QMAKE_AR                = csky-linux-ar cqs
QMAKE_OBJCOPY           = csky-linux-objcopy
QMAKE_NM                = csky-linux-nm -P
QMAKE_STRIP             = csky-linux-strip

load(qt_config)

3.configure&make

  • QT下新建文件夹qt-csky用于存放生成文件
  • qt-everywhere-src-5.12.3configure
./configure -prefix /home/cp/Desktop/C-SKY/QT/qt-csky -verbose -confirm-license -opensource -release -xplatform linux-csky-g++ -optimized-qmake -optimize-size -strip -linuxfb -pch -sql-sqlite -qt-libjpeg -qt-libpng -qt-zlib -no-opengl -no-sse2 -no-openssl -no-iconv -no-cups -no-glib -no-dbus -no-xcb -no-separate-debug-info -make libs -nomake examples -nomake tools -nomake tests -skip qt3d -skip qtcanvas3d -skip qtpurchasing -skip qtvirtualkeyboard

make

此时会产生关于double-conversion的错误,如下:
(诛仙剑C-SKY)6-QT
其实在configure中有一个选项可以使用-no-doubleconversion,但是最终也会产生#Your C library does not provide sscanf_l or snprintf_l的错误,所以这里直接看提示打开../3rdparty/double-conversion/include/double-conversion/double-conversion.h:31:0,如下:
(诛仙剑C-SKY)6-QT
可以发现实际上我们没有指定架构导致不能正常使用double-conversion,所以configure时加上-D __riscv,完整的configure如下:

./configure \
    -verbose    \
    -prefix /home/cp/Desktop/C-SKY/QT/qt-csky \
    -confirm-license    \
    -opensource -release    \
    -make libs  \
    -xplatform linux-csky-g++    \
    -optimized-qmake    \
    -optimize-size \
    -strip \
    -linuxfb    \
    -pch    \
    -sql-sqlite  \
    -qt-libjpeg \
    -qt-libpng  \
    -qt-zlib    \
    -no-opengl  \
    -no-sse2    \
    -no-openssl \
    -no-iconv \
    -no-cups    \
    -no-glib    \
    -no-dbus    \
    -no-xcb \
    -no-separate-debug-info \
    -nomake examples -nomake tools -nomake tests    \
    -skip qt3d -skip qtcanvas3d -skip qtpurchasing -skip qtvirtualkeyboard \
    -D __riscv

make & make install

4.安装与配置

4.1安装

  • 将编译安装得到的lib、plugins拷贝到开发板/opt/QT5.12.3_csky文件夹中,其中lib中存放的是QT程序运行所需的动态库文件,plugins中存放的应该是所需的插件
  • 新建/opt/QT5.12.3_csky/fonts文件夹存放字体,字体随便从网上找几个放进去就好

4.2环境变量配置

发现开发板根文件系统存在/etc/profile.d文件夹,启动时/etc/profile自动配置里面的内容,故在/etc/profile.d里面新建qt_env.sh(新建完成需要设置权限),内容为:

#!/bin/sh
 
export QT_ROOT=/opt/QT5.12.3_csky
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_FONTDIR=$QT_ROOT/fonts
export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:$QT_ROOT/lib

此时,重启后如果有编译好QT应用程序,就可以直接运行了(QT5之后不需要-qws)

5.Qt Creator交叉编译环境

5.1安装

sudo apt-get install cmake qt5-default qtcreator

5.2打开

qtcreator

5.3配置

  • 打开Qt Creator–>Tools–>Options–>Build & Run–>Compilers–>Add GCC(ABI:unknown)–>Apply

1.Add GCC C
(诛仙剑C-SKY)6-QT
2.Add GCC C++
(诛仙剑C-SKY)6-QT

  • 切换到Debuggers标签,点击“Add”按钮,选择gdb,Apply,如下:
    (诛仙剑C-SKY)6-QT
  • 切换到Qt Versions标签,点击“Add”按钮,选择qmake,Apply,如下:
    (诛仙剑C-SKY)6-QT
  • 切换到Kits标签,点击“Add”按钮,设置如下:
    (诛仙剑C-SKY)6-QT

5.4工程编译

  • 新建文件夹C-SKY/QtCreator用于放置QT工程
  • 新建工程
    (诛仙剑C-SKY)6-QT
    (诛仙剑C-SKY)6-QT
  • 编译
    (诛仙剑C-SKY)6-QT

5.5运行

拷贝程序至开发板运行即可

参考

[1]https://c-sky.github.io/docs/gx6605s.html
[2]https://blog.csdn.net/vickycheung3/article/details/82182136
[3]CSDN