建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
请选择 进入手机版 | 继续访问电脑版
设置昵称

在此一键设置昵称,即可参与社区互动!

确定
我再想想
选择版块
标签
您还可以添加5个标签
  • 没有搜索到和“关键字”相关的标签
  • 云产品
  • 解决方案
  • 技术领域
  • 通用技术
  • 平台功能
取消

北冥鱼01

发帖: 6粉丝: 1

发消息 + 关注

发表于2019年12月27日 15:59:26 1115 3
直达本楼层的链接
楼主
显示全部楼层
[大数据] 云基华海-鲲鹏920直接编译Qt5.12.6体验——这是一款通用计算机!

云基华海-鲲鹏920直接编译Qt5.12.6体验

——这是一款通用计算机!

前言

       大数据计算开发过程中,及IoT物联网应用开发,一些性能问题或系统级操作或硬件操作经常用到C++编写的程序,Qt/C++作为广受欢迎的开发框架,应该有鲲鹏的适配。在鲲鹏大赛培训期间,借助实验使用的鲲鹏920ECS主机,进行了Qt直接编译尝试。

一、前期准备

 

鲲鹏920服务器信息:


 

 

 

[root@ecs-417c-0003 linux-arm-gnueabi-g++]# cat /proc/cpuinfo

图片3.png 

一屏显示不完,继续。。。

图片4.png 

0~23总计24个核

二、下载源码

 

[root@ecs-417c-0003-opt]# wget http://download.qt.io/archive/qt/5.12/5.12.6/single/qt-everywhere-src-5.12.6.tar.xz

 

图片5.png 

那个快啊,近500M不到1分钟。

 

 

[root@ecs-417c-0003-opt]#wget http://download.qt.io/archive/qt/5.12/5.12.6/single/qt-everywhere-src-5.12.6.zip

 

图片6.png 

三、解压程序

 

[root@ecs-417c-0003 opt]# unzip qt-everywhere-src-5.12.6.zip

 

图片7.png 

 

四、预编译配置

 

[root@ecs-417c-0003 qt-everywhere-src-5.12.6]# touch qt_compile_conf.sh

 

[root@ecs-417c-0003 qt-everywhere-src-5.12.6]# vi qt_compile_conf.sh

图片8.png 

 

 

[root@ecs-417c-0003 qt-everywhere-src-5.12.6]# ./qt_compile_conf.sh

 

图片9.png 

 

 

[root@ecs-417c-0003 qt-everywhere-src-5.12.6]# mkdir -p /opt/arm-kunpeng/qt5.12.6 

[root@ecs-417c-0003 qt-everywhere-src-5.12.6]# cd ..

[root@ecs-417c-0003 opt]# chmod +x -R qt-everywhere-src-5.12.6

  

 

[root@ecs-417c-0003 qt-everywhere-src-5.12.6]# cp configure configure_bak

[root@ecs-417c-0003 qt-everywhere-src-5.12.6]# vi ./configure

 

[root@ecs-417c-0003 qt-everywhere-src-5.12.6]# ./configure

 

 图片10.png

被换行符坑了,下载的.zip包中是Windows换行格式,而.tar.xzlinux换行符。

图片11.png  图片12.png

[root@ecs-417c-0003 opt]# tar --help

图片13.png 

[root@ecs-417c-0003 opt]# tar -Jxvf qt-everywhere-src-5.12.6.tar.xz

 

[root@ecs-417c-0003 qt-everywhere-src-5.12.6]# ./configure

图片14.png 

[root@ecs-417c-0003 opt]# rm -rf ./qt-everywhere-src-5.12.6-zipbak/

[root@ecs-417c-0003 opt]# rm -rf ./qt-everywhere-src-5.12.6.zip

 

[root@ecs-417c-0003 qt-everywhere-src-5.12.6]# touch qt_compile_conf.sh

[root@ecs-417c-0003 qt-everywhere-src-5.12.6]# vi qt_compile_conf.sh

 

 

图片15.png 

 

重新开始

[root@ecs-417c-0003 qt-everywhere-src-5.12.6]# chmod 777 ./qt_compile_conf.sh

[root@ecs-417c-0003 qt-everywhere-src-5.12.6]# ./qt_compile_conf.sh

 

编译配置中了,期望不要报错

图片16.png 

错误??

图片17.png 

错误??

图片18.png 


图片19.png

 

复制粘贴文件的错误,去掉注释 #qt的安装路径 、去掉行尾空格

 

 

 图片20.png

 

 

预编译成功!

图片21.png

  

 图片22.png

  

五、编译安装

 

[root@ecs-417c-0003 qt-everywhere-src-5.12.6]# gmake

进行中,充满期待...

图片23.png 

11:11开始。。。

11:18,鲲鹏很快啊

很遗憾,有报错

图片24.png 

 

从新编写qt_compile_conf.sh

 

这次多核编译

[root@ecs-417c-0003 qt-everywhere-src-5.12.6]# gmake -j20

这次果然很快,3分钟左右。

 

没报错,成功了吗?不敢相信

图片25.png 

好吧,还是安装试试吧!

[root@ecs-417c-0003 qt-everywhere-src-5.12.6]# gmake install

很遗憾,安装失败!

图片26.png 

 

修改qmake.conf,鲲鹏已经移植了gccg++

图片27.png 

图片28.png 

qmake.conf修改如下

#

# qmake configuration for building with arm-linux-gnueabi-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)

 

# modifications to g++.conf

QMAKE_CC                = gcc

QMAKE_CXX               = g++

QMAKE_LINK              = g++

QMAKE_LINK_SHLIB        = g++

 

# modifications to linux.conf

QMAKE_AR                = gcc-ar cqs

QMAKE_OBJCOPY           = gcc-objcopy

QMAKE_NM                = gcc-nm -P

QMAKE_STRIP             = gcc-strip

 

load(qt_config)

 

预编译:

[root@ecs-417c-0003 qt-everywhere-src-5.12.6]# ./qt_compile_conf.sh

图片29.png 

 

[root@ecs-417c-0003 qt-everywhere-src-5.12.6]# gmake

 

图片30.png 

没报错,先复制下来吧,排查问题

 

-src-5.12.6/qtbase/lib/libQt5Widgets.so /opt/qt-everywhere-src-5.12.6/qtbase/lib/libQt5Gui.so /opt/qt-everywhere-src-5.12.6/qtbase/lib/libQt5Core.so -lpthread   

gmake[5]: Leaving directory `/opt/qt-everywhere-src-5.12.6/qtsvg/examples/svg/richtext/textobject'

gmake[4]: Leaving directory `/opt/qt-everywhere-src-5.12.6/qtsvg/examples/svg/richtext'

g++ -Wl,-O1 -Wl,--enable-new-dtags -Wl,-rpath-link,/opt/qt-everywhere-src-5.12.6/qtbase/lib -o delayedencoding .obj/main.o .obj/mimedata.o .obj/sourcewidget.o .obj/qrc_delayedencoding.o .obj/moc_mimedata.o .obj/moc_sourcewidget.o   /opt/qt-everywhere-src-5.12.6/qtsvg/lib/libQt5Svg.so /opt/qt-everywhere-src-5.12.6/qtbase/lib/libQt5Widgets.so /opt/qt-everywhere-src-5.12.6/qtbase/lib/libQt5Gui.so /opt/qt-everywhere-src-5.12.6/qtbase/lib/libQt5Core.so -lpthread   

gmake[5]: Leaving directory `/opt/qt-everywhere-src-5.12.6/qtsvg/examples/svg/draganddrop/delayedencoding'

gmake[4]: Leaving directory `/opt/qt-everywhere-src-5.12.6/qtsvg/examples/svg/draganddrop'

g++ -Wl,-O1 -Wl,--enable-new-dtags -o fluidlauncher .obj/demoapplication.o .obj/fluidlauncher.o .obj/main.o .obj/pictureflow.o .obj/slideshow.o .obj/qrc_fluidlauncher.o .obj/moc_demoapplication.o .obj/moc_fluidlauncher.o .obj/moc_pictureflow.o .obj/moc_slideshow.o   /opt/qt-everywhere-src-5.12.6/qtbase/lib/libQt5Widgets.so /opt/qt-everywhere-src-5.12.6/qtbase/lib/libQt5Gui.so /opt/qt-everywhere-src-5.12.6/qtbase/lib/libQt5Core.so -lpthread   

gmake[5]: Leaving directory `/opt/qt-everywhere-src-5.12.6/qtsvg/examples/svg/embedded/fluidlauncher'

g++ -Wl,-O1 -Wl,--enable-new-dtags -Wl,-rpath-link,/opt/qt-everywhere-src-5.12.6/qtbase/lib -o weatherinfo .obj/weatherinfo.o .obj/qrc_weatherinfo.o   /opt/qt-everywhere-src-5.12.6/qtsvg/lib/libQt5Svg.so /opt/qt-everywhere-src-5.12.6/qtbase/lib/libQt5Widgets.so /opt/qt-everywhere-src-5.12.6/qtbase/lib/libQt5Gui.so /opt/qt-everywhere-src-5.12.6/qtbase/lib/libQt5Network.so /opt/qt-everywhere-src-5.12.6/qtbase/lib/libQt5Core.so -lpthread   

gmake[5]: Leaving directory `/opt/qt-everywhere-src-5.12.6/qtsvg/examples/svg/embedded/weatherinfo'

gmake[4]: Leaving directory `/opt/qt-everywhere-src-5.12.6/qtsvg/examples/svg/embedded'

gmake[3]: Leaving directory `/opt/qt-everywhere-src-5.12.6/qtsvg/examples/svg'

gmake[2]: Leaving directory `/opt/qt-everywhere-src-5.12.6/qtsvg/examples'

gmake[1]: Leaving directory `/opt/qt-everywhere-src-5.12.6/qtsvg'

[root@ecs-417c-0003 qt-everywhere-src-5.12.6]#

 

安装还是报错

图片31.png 

 

c -I/opt/qt-everywhere-src-5.12.6/qtbase/mkspecs/linux-arm-gnueabi-g++ ../../../3rdparty/libwebp/src/dsp/alpha_processing_neon.c -o .obj/alpha_processing_neon.o

gcc: error: unrecognized command line option ‘-mfpu=neon’

gmake[5]: *** [.obj/alpha_processing_neon.o] Error 1

gmake[5]: Leaving directory `/opt/qt-everywhere-src-5.12.6/qtimageformats/src/plugins/imageformats/webp'

gmake[4]: *** [sub-webp-install_subtargets] Error 2

gmake[4]: Leaving directory `/opt/qt-everywhere-src-5.12.6/qtimageformats/src/plugins/imageformats'

gmake[3]: *** [sub-imageformats-install_subtargets] Error 2

gmake[3]: Leaving directory `/opt/qt-everywhere-src-5.12.6/qtimageformats/src/plugins'

gmake[2]: *** [sub-plugins-install_subtargets] Error 2

gmake[2]: Leaving directory `/opt/qt-everywhere-src-5.12.6/qtimageformats/src'

gmake[1]: *** [sub-src-install_subtargets] Error 2

gmake[1]: Leaving directory `/opt/qt-everywhere-src-5.12.6/qtimageformats'

gmake: *** [module-qtimageformats-install_subtargets] Error 2

[root@ecs-417c-0003 qt-everywhere-src-5.12.6]#

 

打不死的小强!再来!!!

[root@ecs-417c-0003 qt-everywhere-src-5.12.6]# gmake -j24

[root@ecs-417c-0003 qt-everywhere-src-5.12.6]# make -j24

[root@ecs-417c-0003 qt-everywhere-src-5.12.6]# make install

 

 

 

图片32.png 

删除 -no-nis

 

删除makefile中的qtimageformats相关的模块

图片33.png 

 

[root@ecs-417c-0003 qt-everywhere-src-5.12.6]# gmake install -j24

图片34.png 

 

(如有Error,可能还有qtimageformats为删除干净。重复以上步骤再来一遍。)

 

六、编译成功

 

[root@ecs-417c-0003 qt-everywhere-src-5.12.6]# cd /opt/arm-kunpeng/qt5.12.6/

 

图片35.png 

 

[root@ecs-417c-0003 qt5.12.6]# cd lib/

[root@ecs-417c-0003 lib]# ls

图片36.png 

总结

1. 预编译.configure的参数一定要配置好;

2. 如果编译还有错误,检查makefile,根据错误提示,修改相关参数;

3. 如果还解决不了,按我以前的经验,可以修改.pro文件,屏蔽掉不需要的模块,如3D

4. gmake编译要比make快;

5. -j24参数,24核编译,几分钟搞定,体验超好(玩过ARM交叉编译的应该会深有体会);

感想

第一体验:鲲鹏编译很快,平时8x86下需要几个小时,鲲鹏仅需几分钟。——当然24核啊;

第二体验:鲲鹏编译与x86下编译体验一致。本以为需要交叉编译,结果想歪了,走弯路了。

第三体验:玩嵌入式ARM的朋友们,玩鲲鹏时,一定不要有任何嵌入式的想法,就把他当做一个通用计算机用就行了。

第四体验:没玩过ARM或嵌入式的朋友,不要怕,就当他是个x86架构的系统玩就行了。

最后,期待鲲鹏通用PC机尽快上市啊!



举报
分享

分享文章到朋友圈

分享文章到微博
发表于2020年03月30日 19:05:40
直达本楼层的链接
沙发
显示全部楼层

赞~

点赞 评论 引用 举报

tensility

发帖: 0粉丝: 0

发消息 + 关注

发表于2020年03月31日 11:49:41
直达本楼层的链接
板凳
显示全部楼层

厉害了,赞楼主!我们最近也在鲲鹏上编译QT库,遇到了同样的问题,就是

gcc: error: unrecognized command line option ‘-mfpu=neon’

gmake[5]: *** [.obj/alpha_processing_neon.o] Error 1

gmake[5]: Leaving directory `/opt/qt-everywhere-src-5.12.6/qtimageformats/src/plugins/imageformats/webp'

gmake[4]: *** [sub-webp-install_subtargets] Error 2

gmake[4]: Leaving directory `/opt/qt-everywhere-src-5.12.6/qtimageformats/src/plugins/imageformats'

gmake[3]: *** [sub-imageformats-install_subtargets] Error 2

gmake[3]: Leaving directory `/opt/qt-everywhere-src-5.12.6/qtimageformats/src/plugins'

gmake[2]: *** [sub-plugins-install_subtargets] Error 2

gmake[2]: Leaving directory `/opt/qt-everywhere-src-5.12.6/qtimageformats/src'

gmake[1]: *** [sub-src-install_subtargets] Error 2

gmake[1]: Leaving directory `/opt/qt-everywhere-src-5.12.6/qtimageformats'

gmake: *** [module-qtimageformats-install_subtargets] Error 2

[root@ecs-417c-0003 qt-everywhere-src-5.12.6]#


这个错误楼主是怎么解决的呢?急问啊


点赞 评论 引用 举报

方亮

发帖: 0粉丝: 0

发消息 + 关注

发表于2021年01月14日 18:48:47
直达本楼层的链接
地板
显示全部楼层

点赞 评论 引用 举报

游客

富文本
Markdown
您需要登录后才可以回帖 登录 | 立即注册