sword_man_ 2022-07-26 15:19 采纳率: 0%
浏览 321
已结题

Loongarch64交叉编译Qt15.3

问题遇到的现象和发生背景

在ubuntu20.04上使用Loongarch64交叉编译Qt15.3版本编译失败 。
loongarch64交叉编译器是在http://www.loongnix.cn/zh/toolchain/GNU/ 这里下载的。
我操作流程大致如下:

  • 1.交叉编译环境搭建
    交叉编译器版本信息确认:

loongarch64-linux-gnu-gcc -v
Using built-in specs.
COLLECT_GCC=loongarch64-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/home/bsh/Documents/toolchain-loongarch64-linux-gnu-cross-830/bin/../libexec/gcc/loongarch64-linux-gnu/8.3.0/lto-wrapper
Target: loongarch64-linux-gnu
Configured with: /dev/shm/build_loongarch64_cross-830-rc1.0_2022-04-22/src/gcc/configure --build=x86_64-redhat-linux --host=x86_64-redhat-linux --target=loongarch64-linux-gnu --program-prefix=loongarch64-linux-gnu- --prefix=/dev/shm/build_loongarch64_cross-830-rc1.0_2022-04-22/cross --libdir=/dev/shm/build_loongarch64_cross-830-rc1.0_2022-04-22/cross/lib --with-gxx-include-dir=/dev/shm/build_loongarch64_cross-830-rc1.0_2022-04-22/cross/sysroot/include/c++ --with-sysroot=/dev/shm/build_loongarch64_cross-830-rc1.0_2022-04-22/cross/sysroot --with-native-system-header-dir=/include --with-slibdir=/dev/shm/build_loongarch64_cross-830-rc1.0_2022-04-22/cross/sysroot/lib --with-arch=loongarch64 --with-abi=lp64d --with-multilib-list=lp64d,lp64s --with-pkgversion='LoongArch\ GNU\ toolchain\ rc1.0' --disable-linker-build-id --enable-languages=c,c++,fortran --disable-libgcc --disable-libstdc++ --disable-libgfortran --disable-gcov --disable-libcc1 --enable-threads=posix --enable-tls --enable-initfini-array --enable-__cxa_atexit --disable-libatomic --disable-libmudflap --disable-libssp --disable-libvtv --disable-libgomp --disable-libmpx --disable-nls --disable-bootstrap
Thread model: posix
gcc version 8.3.0 (LoongArch GNU toolchain rc1.0)

交叉编译器链接地址确认:


loongarch64-linux-gnu-ld --verbose | grep SEARCH
SEARCH_DIR("=//loongarch64-linux-gnu/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");

  • 2.源码解压并配置mkspecs目录下的qmake.conf文件
    修改qmake.conf文件:

#
# qmake configuration for building with loongarch64-linux-gnu-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                = loongarch64-linux-gnu-gcc
QMAKE_CXX               = loongarch64-linux-gnu-g++
QMAKE_LINK              = loongarch64-linux-gnu-g++
QMAKE_LINK_SHLIB        = loongarch64-linux-gnu-g++

# modifications to linux.conf
QMAKE_AR                = loongarch64-linux-gnu-ar cqs
QMAKE_OBJCOPY           = loongarch64-linux-gnu-objcopy
QMAKE_NM                = loongarch64-linux-gnu-nm -P
QMAKE_STRIP             = loongarch64-linux-gnu-strip
load(qt_config)
  • 3.配置configure参数至编译脚本compile.sh

CC=loongarch64-linux-gnu-gcc CXX=loongarch64-linux-gnu-g++ ./configure -prefix /home/loongarch64_qt5_15_3_commercial/  \
-commercial -release -xplatform loongarch64-linux-gnu -make libs -nomake examples -no-opengl -nomake tests -nomake tools -confirm-license \
 -optimized-qmake \
 -skip qt3d \
 -skip qtactiveqt \
 -skip qtandroidextras \
 -skip qtcanvas3d \
 -skip qtcharts \
 -skip qtconnectivity \
 -skip qtdatavis3d \
 -skip qtdeclarative \
 -skip qtdoc \
 -skip qtgamepad \
 -skip qtgraphicaleffects \
 -skip qtlocation \
 -skip qtmacextras \
 -skip qtmultimedia \
 -skip qtnetworkauth \
 -skip qtpurchasing \
 -skip qtquickcontrols \
 -skip qtquickcontrols2 \
 -skip qtremoteobjects \
 -skip qtscript \
 -skip qtscxml \
 -skip qtsensors \
 -skip qtserialbus \
 -skip qtserialport \
 -skip qtspeech \
 -skip qtsvg \
 -skip qttools \
 -skip qttranslations \
 -skip qtvirtualkeyboard \
 -skip qtwebchannel \
 -skip qtwebengine \
 -skip qtwebglplugin \
 -skip qtwebsockets \
 -skip qtwebview \
 -skip qtwinextras \
 -skip qtxmlpatterns \
 -recheck-all -v \
 -I /home/bsh/Documents/sysroot/include \
 -R /home/sysroot/lib/uosloongarch64lib/lib/loongarch64-linux-gnu \
 -L /home/sysroot/lib/uosloongarch64lib/lib/loongarch64-linux-gnu \
  • 4.执行configure脚本
    检查xcb模块时,提示如下错误:

Trying source 1 (type inline) of library xcb ...
+ cd /home/qt-everywhere-src-5.15.3_uos_loongarch64/config.tests/xcb && /home/qt-everywhere-src-5.15.3_uos_loongarch64/qtbase/bin/qmake "CONFIG -= qt debug_and_release app_bundle lib_bundle" "CONFIG += shared warn_off console single_arch" 'QMAKE_LIBDIR += /home/sysroot/lib/uosloongarch64lib/lib/loongarch64-linux-gnu' 'INCLUDEPATH += /home/sysroot/include' -early "CONFIG += cross_compile" 'QMAKE_USE += xcb' 'QMAKE_LIBS_XCB = -lxcb' /home/qt-everywhere-src-5.15.3_uos_loongarch64/config.tests/xcb
+ cd /home/qt-everywhere-src-5.15.3_uos_loongarch64/config.tests/xcb && MAKEFLAGS= /usr/bin/make clean && MAKEFLAGS= /usr/bin/make
> rm -f main.o
> rm -f *~ core *.core
> loongarch64-linux-gnu-g++ -c -pipe -O2 -w -fPIC  -I. -I/home/sysroot/include -I/home/qt-everywhere-src-5.15.3_uos_loongarch64/qtbase/mkspecs/loongarch64-linux-gnu -o main.o main.cpp
> loongarch64-linux-gnu-g++ -Wl,-O1 -o xcb main.o   -L/home/sysroot/lib/uosloongarch64lib/lib/loongarch64-linux-gnu -lxcb   
> /home/toolchain-loongarch64-linux-gnu-cross-830/bin/../lib/gcc/loongarch64-linux-gnu/8.3.0/../../../../loongarch64-linux-gnu/bin/ld: warning: libXau.so.6, needed by /home/sysroot/lib/uosloongarch64lib/lib/loongarch64-linux-gnu/libxcb.so, not found (try using -rpath or -rpath-link)
> /home/toolchain-loongarch64-linux-gnu-cross-830/bin/../lib/gcc/loongarch64-linux-gnu/8.3.0/../../../../loongarch64-linux-gnu/bin/ld: warning: libXdmcp.so.6, needed by /home/sysroot/lib/uosloongarch64lib/lib/loongarch64-linux-gnu/libxcb.so, not found (try using -rpath or -rpath-link)
> /home/toolchain-loongarch64-linux-gnu-cross-830/bin/../lib/gcc/loongarch64-linux-gnu/8.3.0/../../../../loongarch64-linux-gnu/bin/ld: /home/sysroot/lib/uosloongarch64lib/lib/loongarch64-linux-gnu/libxcb.so: undefined reference to `XauDisposeAuth'
> /home/toolchain-loongarch64-linux-gnu-cross-830/bin/../lib/gcc/loongarch64-linux-gnu/8.3.0/../../../../loongarch64-linux-gnu/bin/ld: /home/sysroot/lib/uosloongarch64lib/lib/loongarch64-linux-gnu/libxcb.so: undefined reference to `XdmcpWrap'
> /home/toolchain-loongarch64-linux-gnu-cross-830/bin/../lib/gcc/loongarch64-linux-gnu/8.3.0/../../../../loongarch64-linux-gnu/bin/ld: /home/sysroot/lib/uosloongarch64lib/lib/loongarch64-linux-gnu/libxcb.so: undefined reference to `XauGetBestAuthByAddr'
> collect2: error: ld returned 1 exit status
> make: *** [Makefile:67:xcb] 错误 1
 => source failed verification.

在路径/home/sysroot/lib/uosloongarch64lib/lib/loongarch64-linux-gnu中包含了xcb相关的依赖库。

/home/sysroot/lib/uosloongarch64lib/lib/loongarch64-linux-gnu$ ls libxcb*
libxcb.a                   libxcb-dri2.so.0       libxcb-image.so          libxcb-record.so             libxcb-shape.a         libxcb-util.so.1          libxcb-xkb.so
libxcb-composite.a         libxcb-dri2.so.0.0.0   libxcb-image.so.0        libxcb-record.so.0           libxcb-shape.so        libxcb-util.so.1.0.0      libxcb-xkb.so.1
libxcb-composite.so        libxcb-dri3.a          libxcb-image.so.0.0.0    libxcb-record.so.0.0.0       libxcb-shape.so.0      libxcb-xf86dri.a          libxcb-xkb.so.1.0.0
libxcb-composite.so.0      libxcb-dri3.so         libxcb-imdkit.so         libxcb-render.a              libxcb-shape.so.0.0.0  libxcb-xf86dri.so         libxcb-xrm.a
libxcb-composite.so.0.0.0  libxcb-dri3.so.0       libxcb-imdkit.so.0       libxcb-render.so             libxcb-shm.a           libxcb-xf86dri.so.0       libxcb-xrm.so
libxcb-cursor.a            libxcb-dri3.so.0.0.0   libxcb-imdkit.so.0.1     libxcb-render.so.0           libxcb-shm.so          libxcb-xf86dri.so.0.0.0   libxcb-xrm.so.0
libxcb-cursor.so           libxcb-ewmh.a          libxcb-keysyms.a         libxcb-render.so.0.0.0       libxcb-shm.so.0        libxcb-xfixes.a           libxcb-xrm.so.0.0.0
libxcb-cursor.so.0         libxcb-ewmh.so         libxcb-keysyms.so        libxcb-render-util.a         libxcb-shm.so.0.0.0    libxcb-xfixes.so          libxcb-xtest.a
libxcb-cursor.so.0.0.0     libxcb-ewmh.so.2       libxcb-keysyms.so.1      libxcb-render-util.so        libxcb.so              libxcb-xfixes.so.0        libxcb-xtest.so
libxcb-damage.a            libxcb-ewmh.so.2.0.0   libxcb-keysyms.so.1.0.0  libxcb-render-util.so.0      libxcb.so.1            libxcb-xfixes.so.0.0.0    libxcb-xtest.so.0
libxcb-damage.so           libxcb-glx.a           libxcb-present.a         libxcb-render-util.so.0.0.0  libxcb.so.1.1.0        libxcb-xinerama.a         libxcb-xtest.so.0.0.0
libxcb-damage.so.0         libxcb-glx.so          libxcb-present.so        libxcb-res.a                 libxcb-sync.a          libxcb-xinerama.so        libxcb-xv.a
libxcb-damage.so.0.0.0     libxcb-glx.so.0        libxcb-present.so.0      libxcb-res.so                libxcb-sync.so         libxcb-xinerama.so.0      libxcb-xvmc.a
libxcb-dpms.a              libxcb-glx.so.0.0.0    libxcb-present.so.0.0.0  libxcb-res.so.0              libxcb-sync.so.1       libxcb-xinerama.so.0.0.0  libxcb-xvmc.so
libxcb-dpms.so             libxcb-icccm.a         libxcb-randr.a           libxcb-res.so.0.0.0          libxcb-sync.so.1.0.0   libxcb-xinput.a           libxcb-xvmc.so.0
libxcb-dpms.so.0           libxcb-icccm.so        libxcb-randr.so          libxcb-screensaver.a         libxcb-util.a          libxcb-xinput.so          libxcb-xvmc.so.0.0.0
libxcb-dpms.so.0.0.0       libxcb-icccm.so.4      libxcb-randr.so.0        libxcb-screensaver.so        libxcb-util.so         libxcb-xinput.so.0        libxcb-xv.so
libxcb-dri2.a              libxcb-icccm.so.4.0.0  libxcb-randr.so.0.1.0    libxcb-screensaver.so.0      libxcb-util.so.0       libxcb-xinput.so.0.1.0    libxcb-xv.so.0
libxcb-dri2.so             libxcb-image.a         libxcb-record.a          libxcb-screensaver.so.0.0.0  libxcb-util.so.0.0.0   libxcb-xkb.a              libxcb-xv.so.0.0.0


操作环境、软件版本等信息

目标机器及系统:UOS1050 Loongarch64
交叉编译主机:ubuntu20.04 AMD64
交叉编译器:loongarch64-linux-gnu-gcc 8.3

尝试过的解决方法
  • 1.尝试在configure脚本中增加参数
 -Wl,rpath-link=/home/sysroot/lib/uosloongarch64lib/lib/loongarch64-linux-gnu
  • 2.将库/home/sysroot/lib/uosloongarch64lib/lib/loongarch64-linux-gnu创建软连接到/usr/lib、/lib、/loongarch64/目录下
我想要达到的结果

configure脚本check的时候xcb模块能通过检查

其他疑问
  • 1.loongarch64-linux-gnu-ld --verbose | grep SEARCH命令的结果是不是不正常?
    这个命令与本机的aarch64-linux-gnu-ld命令执行结果不一致:
aarch64-linux-gnu-ld --verbose | grep SEARCH
SEARCH_DIR("=/usr/local/lib/aarch64-linux-gnu"); SEARCH_DIR("=/lib/aarch64-linux-gnu"); SEARCH_DIR("=/usr/lib/aarch64-linux-gnu"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SEARCH_DIR("=/usr/aarch64-linux-gnu/lib");
  • 写回答

1条回答 默认 最新

  • 「已注销」 2022-07-26 15:47
    关注

    你把流程和报错复制到记事本发给我

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月9日
  • 创建了问题 7月26日

悬赏问题

  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探