交叉编译Qt5.5.1 with egl (1)

Step 1

假设嵌入式平台已经弄好了,什么boot,kernel,nfs都搭好了,开始准备开发。

1.安装交叉编译器,我使用的是板子提供商提供的交叉编译器。

cp /media/Upan/arm-linux-gcc -r ~/opt/

2.配置环境变量,在~/.bashrc中添加

export PATH=$PATH:/home/dashuage/opt/arm-linux-gcc/bin

3.source一下,在终端下执行

arm-linux-gcc --version

如果报错,找不到文件,有2个可能的原因:
- 未设置可执行权限,chmod +x arm-linxu-gcc 等程序
- 64位兼容32位程序问题,解决办法看这里

4.我觉得 arm-linux-gcc –version 有时候有点不太靠谱,helloworld才是正道。果然,出问题了

Error1
arm-linux-gnueabi-gcc error trying to exec ‘cc1plus’

在libexec中找到了这个程序,设置可执行权限。继续报错:

Error2
Assembler messages:
Fatal error: invalid –march= option `armv5te’

我感觉还是文件权限的问题,在交叉编译器文件目录下,找到了一个bin目录,里面有gcc g++ ld之类的程序,立刻设置可执行权限。继续报错:

Error3
../lib/libstdc++.so: file not recognized: File format not recognized
Collect2: error: ld returned 1 exit status

折腾了大半天,原来,libstdc++.so原本是个软连接,现在变成了data,用file命令查看的是data类型,所以readelf也读不出来,cat一下,发现,它果然是个软连接。好吧,那就重新ln一下吧。

我写了一个脚本,自动恢复当前目录下的软连接。

到这里,helloworld终于算是编译过去了。

Step 2

下载qt-everywhere源码,解压

Step 3

配置configure参数

./configure -v \
-prefix $PWD/_install \
-release \
-make libs \
-xplatform linux-arm-mydevice-g++ \
-optimized-qmake \
-pch \
-qt-sql-sqlite \
-qt-libjpeg \
-qt-zlib \
-no-sse2 \
-no-openssl \
-no-nis \
-no-cups \
-no-glib \
-no-c++11 \
-no-separate-debug-info \
-nomake examples -nomake tools \
--no-use-gold-linker -qt-sql-sqlite \
-confirm-license -qt-xcb -opensource \
-no-gtkstyle -qt-freetype \
-opengl es2 \ 
-egl \ 
-eglfs \
-linuxfb \
-no-directfb 

顺便chmod +x一下

Step 4

添加板子的信息,在qt源码根目录下,执行

cp qtbase/mkspecs/linux-arm-gnueabi-g++ -r qtbase/mkspecs/linux-arm-mydevice-g++

修改qtbase/mkspecs/linux-arm-mydevice-g++/qmake.conf文件,把里面的编译器改成自己的交叉编译器。

Step 5

如果要编译EGL,需要做如下步骤:
1. 交叉编译的EGL, GLEv2, Mali(我的板子用的是mali),一般板子的厂商都会提供,把它们和交叉编译器放在一起就好了,后面需要用绝对路径指定这些库的includepath、libpath、lib。
2. 利用Qt源码提供的硬件配置文件,进行修改。找到和自己的板子最接近的那个

cp qtbase/mkspecs/devices/linux-arm-hisicon-hix*&^-g++ -r qtbase/mkspecs/devices/linux-arm-hisiv400-g++
  1. 修改linux-arm-hisiv400-g++中的qmake.conf,指定自己的EGL文件。

从这个文件里面,其实就是配置各种环境变量,这些环境变量就可以告诉Qt编译的时候,具体编译那个模块,需要到哪里去找头文件和库文件。如果后面配置的时候,发现没有找到,可以在这里面添加修改,有没有觉得很神奇?

注意,指定库文件的时候,大小写敏感。网上各种-lMali,折腾半天发现,我擦,我的是libmali.so, 需要-lmali。

Step 6

仔细看configure参数,可以发现,仅仅只有-xplatform linux-arm-mydevice-g++ 一项,是和硬件板子有关系的,而它只指向了Step4中的文件,没有指定Step5的文件。可以考虑Step 5配置文件里的环境变量写到Step 4的配置文件里去。

官方用的是-device -device-option;关于这两种的区别,我后续再来探究一下。

Step 7

在Qt源码根目录下,./config5-5-1.sh开始配置。

Step 8

观察configure清单,看到 egl下的mali opengl egl都是yes,好开森啊~~~

~未完待续~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值