找回密码
 立即注册
收起左侧

qt5.8.0 交叉编译时make出错

5
回复
10623
查看
[复制链接]
累计签到:2 天
连续签到:1 天
来源: 2017-2-6 17:13:19 显示全部楼层 |阅读模式
1Qter豆

环境:
host:Ubuntu 14.04
target: jetson TX1
QT源码: qt-everywhere-opensource-src-5.8.0.tar.gz
Cross compiler : gcc-linaro-5.3.1-2016.05-x86_64_aarch64-linux-gnu


问题:
configure成功后,make:
/home/suma/GUI/gcc/gcc-linaro/bin/../lib/gcc/aarch64-linux-gnu/5.3.1/../../../../aarch64-linux-gnu/bin/ld: /home/suma/tx1/Linux_for_Tegra/rootfs/lib/aarch64-linux-gnu/libz.a(compress.o)(.text+0x10): unresolvable R_AARCH64_ADR_PREL_PG_HI21 relocation against symbol `__stack_chk_guard@@GLIBC_2.17'
/home/suma/GUI/gcc/gcc-linaro/bin/../lib/gcc/aarch64-linux-gnu/5.3.1/../../../../aarch64-linux-gnu/bin/ld: final link failed: Nonrepresentable section on output
collect2: error: ld returned 1 exit status
make[3]: *** [../../lib/libQt5Core.so.5.8.0] Error 1
make[3]: Leaving directory `/home/suma/GUI/qt/qt-everywhere-opensource-src-5.8.0/qtbase/src/corelib'
make[2]: *** [sub-corelib-make_first] Error 2
make[2]: Leaving directory `/home/suma/GUI/qt/qt-everywhere-opensource-src-5.8.0/qtbase/src'
make[1]: *** [sub-src-make_first] Error 2
make[1]: Leaving directory `/home/suma/GUI/qt/qt-everywhere-opensource-src-5.8.0/qtbase'
make: *** [module-qtbase-make_first] Error 2


在网上搜,说是编译时加-fPIC,可我查看/qtbase/src/corelib/下的makefile文件发现:
CFLAGS        = -pipe -mtune=cortex-a57.cortex-a53 -march=armv8-a --sysroot=/home/suma/tx1/Linux_for_Tegra/rootfs -O3 -fvisibility=hidden -Wall -W -D_REENTRANT -fPIC $(DEFINES)
CXXFLAGS      = -pipe -mtune=cortex-a57.cortex-a53 -march=armv8-a --sysroot=/home/suma/tx1/Linux_for_Tegra/rootfs -O3 -std=c++1z -fvisibility=hidden -fvisibility-inlines-hidden -Wall -W -Wvla -Wdate-time -D_REENTRANT -fPIC $(DEFINES)
可以看到编译时是加了-fPIC的,应该还有其他的原因
有了解的吗? 急求!拜谢!


回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2017-2-8 14:02:55 显示全部楼层
修改链接库的路径顺序完美解决!

解决办法:
错误路径:
    QMAKE_LIBDIR += \
    $$[QT_SYSROOT]/usr/lib \
    $$[QT_SYSROOT]/lib/aarch64-linux-gnu \
    $$[QT_SYSROOT]/usr/lib/aarch64-linux-gnu
正确路径:
    QMAKE_LIBDIR += \
    $$[QT_SYSROOT]/usr/lib/aarch64-linux-gnu \
    $$[QT_SYSROOT]/usr/lib \
    $$[QT_SYSROOT]/lib/aarch64-linux-gnu
注:先从/usr/lib/aarch64-linux-gnu查找,再从/usr/lib,接着是/lib
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2017-2-9 06:05:03 显示全部楼层
好人做到底,你的configure是怎么写的?交叉编译的话,是从哪里编译到哪里??
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2017-2-9 13:15:29 显示全部楼层
stlcours 发表于 2017-2-9 06:05
好人做到底,你的configure是怎么写的?交叉编译的话,是从哪里编译到哪里?? ...

host-pc : ubuntu 14.04
target device : jetson TX1
cross compiler : gcc-linaro-6.2.1-2016.11-x86_64_aarch64-linux-gnu
qt源码:qt-everywhere-opensource-src-5.8.0
configure:
./configure \
-v \
-opensource \
-confirm-license \
-device-option CROSS_COMPILE=/home/suma/GUI/gcc/gcc-linaro/bin/aarch64-linux-gnu- \
-device linux-XX-g++ \
-prefix /usr/local/qt5 \
-extprefix /home/suma/GUI/qt/qt5  \
-hostprefix /home/suma/GUI/qt/qt5-host  \
-nomake examples \
-nomake tests    \
-opengl es2 \
-sysroot /XX/rootfs \
注:
-device 具体硬件平台根据个人需求填写,qt可支持的平台请查看:
   /qt-everywhere-opensource-src-5.8.0/qtbase/mkspecs/devices
   例如我的平台是TX1(根据tk1 自己写的):
  -device linux-jetson-tx1-g++
-sysroot  编译时的文件系统环境,需和自己使用的平台同步如/usr,/lib,/bin等
   -sysroot /home/suma/tx1/Linux_for_Tegra/rootfs
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2017-2-9 17:06:06 显示全部楼层
谢谢。不过我特意看了一下,感觉你这行:
-device-option CROSS_COMPILE=/home/suma/GUI/gcc/gcc-linaro/bin/aarch64-linux-gnu- \
怎么这个gnu- 被截断了?写对了吗?

另外,我根据你说的,特意看了一下
C:\Qt\Qt5.8.0\5.8\Src\qtbase\mkspecs\devices目录
发现没有MIPS类型的交叉编译啊,但网上还是能见到有人交叉编译MIPS的QT,这是怎么回事啊?
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2017-2-10 09:04:20 显示全部楼层
本帖最后由 alex_wang 于 2017-2-10 09:46 编辑
stlcours 发表于 2017-2-9 17:06
谢谢。不过我特意看了一下,感觉你这行:
-device-option CROSS_COMPILE=/home/suma/GUI/gcc/gcc-linaro/bi ...

1. 交叉编译工具路径和前缀的指定,到时会自动选择是gcc、g++或者其他的
2.有可能是qt未支持;我编译的tx1也没有,自己仿照其他的写了个
回复

使用道具 举报

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

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了