主题 : 基于Nanopi2 硬件  交叉编译QT 5.6 (支持硬件OpenGL) 复制链接 | 浏览器收藏 | 打印
交流群:64148200
级别: 侠客
UID: 3401
精华: 0
发帖: 58
金钱: 290 两
威望: 58 点
贡献值: 0 点
综合积分: 116 分
注册时间: 2009-01-09
最后登录: 2020-11-12
楼主  发表于: 2016-06-25 14:35

 基于Nanopi2 硬件  交叉编译QT 5.6 (支持硬件OpenGL)

1、移植dbus:
./configure --host=arm-linux --prefix=/usr/local/arm/ CC=arm-linux-gcc --cache-file=arm-linux.cache --without-x CFLAGS=-I/usr/local/arm/include LDFLAGS=-L/usr/local/arm/lib

报错:checking abstract socket namespace... configure: error: cannot run test program while cross compiling
解决:1,首先用locate pkgconfig查看下pkgconfig安装了没有,一般都安装了。找到路径配置到环境变量里:export PKG_CONFIG_PATH=/usr/lib/pkgconfig
2,光设这个环境变量还是不行的,在终端里输入:
#echo ac_cv_have_abstract_sockets=yes>arm-linux.cache
之后,./configure通过!
make
make install

2、移植alsa
./configure --target=arm-linux --host=arm --prefix=/usr/local/arm/
make
make install

3、移植 pcre-8.39.tar.bz2  给qt编译的参数-system-pcre 使用;
./configure --host=arm --target=arm-linux --prefix=/usr/local/arm --enable-pcre16
make
make install

4、移植QT5.6

echo yes | ./configure --prefix=/usr/local/Trolltech/QtEmbedded-5.6.0-arm -opensource -debug -no-c++11 -xplatform linux-arm -alsa -opengl es2 -eglfs -qt-freetype -system-pcre -nomake tests -make examples -v  -I/usr/local/arm/include -L/usr/local/arm/lib -I/usr/local/arm/nexell/include/khronos -L/usr/local/arm/nexell/lib

make
make install

a、
eglconvenience/qeglstreamconvenience_p.h:56:9: error: ‘intptr_t’ does not name a type
typedef intptr_t EGLAttrib;
         ^
In file included from eglconvenience/qeglstreamconvenience.cpp:34:0:

增加 typedef int intptr_t ;

b、

vim qtbase/src/plugins/platforms/eglfs/deviceintegration/eglfs_mali/qeglfsmaliintegration.cpp

注释掉 fbdev_window 结构体定义

5、附件文件说明(文件下载地址 :http://pan.baidu.com/s/1c12HCLM
linux-arm.tar.bz2
qt的编译配置文件,解压到QT源码的qtbase/mkspecs/目录下,主要修改qmake.conf文件

#
# qmake configuration for building with arm-linux-gnueabi-g++
#

MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib

QT_QPA_DEFAULT_PLATFORM = linuxfb
QMAKE_CFLAGS_RELEASE   += -O2 -march=armv7-a
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-a

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

#opengl2 lib and include
QMAKE_INCDIR_OPENGL_ES2 = /usr/local/arm/nexell/include/khronos/
QMAKE_LIBDIR_OPENGL_ES2 = /usr/local/arm/nexell/lib
QMAKE_INCDIR_EGL = /usr/local/arm/nexell/include/khronos/
QMAKE_LIBDIR_EGL = /usr/local/arm/nexell/lib


# modifications to g++.conf
QMAKE_CC                = arm-linux-gcc
QMAKE_CXX               = arm-linux-g++
QMAKE_LINK              = arm-linux-g++
QMAKE_LINK_SHLIB        = arm-linux-g++

# modifications to linux.conf
QMAKE_AR                = arm-linux-ar cqs
QMAKE_OBJCOPY           = arm-linux-objcopy
QMAKE_NM                = arm-linux-nm -P
QMAKE_STRIP             = arm-linux-strip
load(qt_config)


b、nexell.tar.bz2
这是三星官方提供的OpenGL的库和头文件
解压到 /usr/local/arm 下面。如果需的话把这个包也解压到开发板中。

c、QtEmbedded-5.6.0-arm.tar.bz2
编译完成的安装包,可以解压到开发板中运行测试程序
比如:进入QtEmbedded-5.6.0-arm/examples/qt3d/lights
# ./lights -platform eglfs
可以在屏幕上看到3D灯照的效果。



QQ交流群: 64148200
级别: 新手上路
UID: 125645
精华: 0
发帖: 2
金钱: 10 两
威望: 2 点
贡献值: 0 点
综合积分: 4 分
注册时间: 2016-05-31
最后登录: 2016-07-14
1楼  发表于: 2016-07-13 12:29

 Re:基于Nanopi2 硬件  交叉编译QT 5.6 (支持硬件OpenGL)

楼主你好  ,感谢你的分享  ,能否加我QQ 372546813 我有几个关于QT的问题想请教你,谢谢!
级别: 新手上路
UID: 126309
精华: 0
发帖: 6
金钱: 35 两
威望: 7 点
贡献值: 0 点
综合积分: 12 分
注册时间: 2016-06-30
最后登录: 2016-09-12
2楼  发表于: 2016-09-07 22:35

 Re:基于Nanopi2 硬件  交叉编译QT 5.6 (支持硬件OpenGL)

楼主 我按照你的文档步骤编译 到make qt时报错,错误如下:
/opt/FriendlyARM/toolchain/4.9.3/lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/bin/ld.gold: warning: skipping incompatible /usr/local/arm/lib/libpcre16.a while searching for pcre16
/opt/FriendlyARM/toolchain/4.9.3/lib/gcc/arm-cortexa9-linux-gnueabihf/4.9.3/../../../../arm-cortexa9-linux-gnueabihf/bin/ld.gold: error: cannot find -lpcre16
tools/qregularexpression.cpp:977: error: undefined reference to 'pcre16_free_study'
tools/qregularexpression.cpp:984: error: undefined reference to 'pcre16_free'
tools/qregularexpression.cpp:1004: error: undefined reference to 'pcre16_compile2'
tools/qregularexpression.cpp:1024: error: undefined reference to 'pcre16_fullinfo'
tools/qregularexpression.cpp:1028: error: undefined reference to 'pcre16_fullinfo'
tools/qregularexpression.cpp:1034: error: undefined reference to 'pcre16_config'
tools/qregularexpression.cpp:1058: error: undefined reference to 'pcre16_fullinfo'
tools/qregularexpression.cpp:1170: error: undefined reference to 'pcre16_study'
tools/qregularexpression.cpp:1173: error: undefined reference to 'pcre16_assign_jit_stack'
tools/qregularexpression.cpp:1194: error: undefined reference to 'pcre16_get_stringnumber'
tools/qregularexpression.cpp:1214: error: undefined reference to 'pcre16_exec'
tools/qregularexpression.cpp:1221: error: undefined reference to 'pcre16_exec'
tools/qregularexpression.cpp:1633: error: undefined reference to 'pcre16_fullinfo'
tools/qregularexpression.cpp:1083: error: undefined reference to 'pcre16_jit_stack_alloc'
tools/qregularexpression.cpp:1091: error: undefined reference to 'pcre16_jit_stack_free'
collect2: 错误:ld 返回 1
make[3]: *** [../../lib/libQt5Core.so.5.6.0] 错误 1
make[3]:正在离开目录 `/home/qt-everywhere-opensource-src-5.6.0/qtbase/src/corelib'
make[2]: *** [sub-corelib-make_first] 错误 2
make[2]:正在离开目录 `/home/qt-everywhere-opensource-src-5.6.0/qtbase/src'
make[1]: *** [sub-src-make_first] 错误 2
make[1]:正在离开目录 `/home/qt-everywhere-opensource-src-5.6.0/qtbase'
make: *** [module-qtbase-make_first] 错误 2
root@misterlanbing-virtual-machine:/home/qt-everywhere-opensource-src-5.6.0#

提示cannot find -lpcre16找不到, 但是我用的交叉编译器就是NANOPI2的, qt的编译配置文件也用了你的LINUX-ARM,如果你有提示麻烦你给我,非常感谢!