Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Кросс-компиляция QT для Jetson Nano



  • Добрый день.

    Я пытаюсь собрать кросс-компилятор для QT 5.15.2 под целевую платформу Jetson Nano.

    Предварительно на целевой платформе я установил обновления apt а так же поставил следующие пакеты :
    gcc git bison python gperf pkg-config make libclang-dev build-essential

    На основную платформу я скопировал содержимое папок /lib /usr/include /usr/lib с целевой платформы, а так же скачал тулчейн
    gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu

    В переменную PATH я добавил путь $PATH:/opt/qt5jnano/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/bin
    Слинковал ссылки папки sysroot скриптом https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py
    Задал конфигурационный файл устройства следующим образом:

    # qmake configuration for the Jetson Nano 4GB
    
    
    include(../common/linux_device_pre.conf)
    
    QMAKE_INCDIR_POST += \
        $$[QT_SYSROOT]/usr/include \
        $$[QT_SYSROOT]/usr/include/aarch64-linux-gnu
    
    QMAKE_LIBDIR_POST += \
        $$[QT_SYSROOT]/usr/lib \
        $$[QT_SYSROOT]/lib/aarch64-linux-gnu \
        $$[QT_SYSROOT]/usr/lib/aarch64-linux-gnu
    
    QMAKE_RPATHLINKDIR_POST += \
        $$[QT_SYSROOT]/usr/lib \
        $$[QT_SYSROOT]/usr/lib/aarch64-linux-gnu \
        $$[QT_SYSROOT]/lib/aarch64-linux-gnu
        
    QMAKE_INCDIR-EGL = $$[QT_SYSROOT]/usr/lib/aarch64-linux-gnu/tegra-egl
    
    
    DISTRO_OPTS                  += aarch64
    COMPILER_FLAGS               += -march=armv8-a+crypto+crc
    
    EGLFS_DEVICE_INTEGRATION = eglfs_kms_egldevice
    
    include(../common/linux_arm_device_post.conf)
    load(qt_config)
    

    Сконфигурировал qt со следующими параметрами:

     -opengl es2
     -device linux-jetson-nano 
     -device-option CROSS_COMPILE=/opt/qt5jnano/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/bin/aarch64-linux- gnu- 
     -sysroot /opt/qt5jnano/sysroot 
     -prefix /usr/local/qt5jnano 
     -opensource 
     -confirm-license 
     -skip qtscript 
     -skip wayland 
     -skip qtwebengine 
     -force-debug-info 
     -skip qtdatavis3d 
     -nomake examples 
     -make libs 
     -pkg-config 
    -no-use-gold-linker 
    –v
    
    

    Однако в процессе сборки произошла ошибка

     /opt/qt5jnano/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/5.5.0/../../../../aarch64-linux-gnu/bin/ld: final link failed: Bad value
    collect2: error: ld returned 1 exit status
    make[3]: *** [Makefile:1229: ../../lib/libQt5Core.so.5.15.2] Error 1
    make[3]: Leaving directory '/opt/qt5jnano/qt5build/qtbase/src/corelib'
    make[2]: *** [Makefile:225: sub-corelib-make_first] Error 2
    make[2]: Leaving directory '/opt/qt5jnano/qt5build/qtbase/src'
    make[1]: *** [Makefile:51: sub-src-make_first] Error 2
    make[1]: Leaving directory '/opt/qt5jnano/qt5build/qtbase'
    make: *** [Makefile:84: module-qtbase-make_first] Error 2
    


  • Удалось собрать qt и запустить проект на Jetson Nano.
    Моей главной проблемой было не полная замена зависимых ссылок в папках /lib /usr/include /usr/lib целевой платформы.
    Для замены я использовал тот же скрипт, что указан выше.

    Процесс сборки практически полностью отражен в видео https://www.youtube.com/watch?v=PY41CP13p3k&list=LL&index=6&t=2248s&ab_channel=UlasDikme

    Однако были некоторые отличия:

    • автору видео по непонятной мне причине не пришлось исправлять ссылки после повторной синхронизации rsync с папками.
    • при конфигурации qt мне потребовалось создать (командой touch) пустые файлы
      qmake.stash
      qmake.super
      в директории с собираемым qt.

    Так же в процессе работы приложение make на 8 ядрах у меня появилась ошибка
    g++: internal compiler error: Killed (program cc1plus)
    Которую у меня получилось поправить, просто уменьшив количества ядер. К слову здесь https://stackoverflow.com/questions/30887143/make-j-8-g-internal-compiler-error-killed-program-cc1plus
    пишут, что ее можно поправить более грамотным способом.



  • У меня после команды make install выскакивает
    cc1plus: error: one or more PCH files were found, but they were invalid
    cc1plus: error: use -Winvalid-pch for more information
    cc1plus: fatal error: .pch/Qt5MultimediaWidgets: No such file or directory
    compilation terminated.
    make[3]: *** [Makefile:4936: .obj/qcameraviewfinder.o] Error 1
    make[3]: Leaving directory '/opt/qt5jnano/qt5build/qtmultimedia/src/multimediawidgets'
    make[2]: *** [Makefile:140: sub-multimediawidgets-install_subtargets] Error 2
    make[2]: Leaving directory '/opt/qt5jnano/qt5build/qtmultimedia/src'
    make[1]: *** [Makefile:61: sub-src-install_subtargets] Error 2
    make[1]: Leaving directory '/opt/qt5jnano/qt5build/qtmultimedia'
    make: *** [Makefile:820: module-qtmultimedia-install_subtargets] Error 2

    Помогите решить проблему


Log in to reply