Кросс-компиляция Qt 6.8.0 Windows x86 -> Linux aarch64: не удается найти crt1.oLinux

Ответить Пред. темаСлед. тема
Anonymous
 Кросс-компиляция Qt 6.8.0 Windows x86 -> Linux aarch64: не удается найти crt1.o

Сообщение Anonymous »

Я пытаюсь кросс-компилировать Qt6 в Windows 11 для Raspberry Pi 4. Причина этого в том, что WSL2 не очень хорошо обрабатывает графический интерфейс Qt Creator, и я хотел бы иметь возможность разрабатывать приложения в Windows. Я попробовал Yocto/Boot2Qt с неоднозначными результатами (т. е. через 6 часов произошел сбой из-за какой-то непонятной ошибки).
Я следую руководству, которое, как я подтвердил, хорошо работает для Linux: https ://wiki.qt.io/Cross-Compile_Qt_6_for_Raspberry_Pi. В настоящий момент я наблюдаю проблемы с «базовым тестом компилятора» из Cmake, поскольку он, похоже, не может найти библиотеки, предположительно связанные с Glibc, даже если они присутствуют в моем системном корне.
На данный момент я сделал в Windows следующее:
  • Я успешно скомпилировал Qt 6.8.0 для Windows из исходного кода
  • Я создал известный рабочий sysroot моего устройства Raspberry Pi на моем ПК и поместил его рядом со сборкой Qt Host. Все символические ссылки относительны, и они успешно использовались для кросс-компиляции из Linux.
  • Я создал файл цепочки инструментов, аналогичный показанному в приведенной выше ссылке. Я изменил его, чтобы удалить ссылки PKG_CONFIG, поскольку у меня не установлен pkg-config. Я также удалил несколько других, казалось бы, лишних фрагментов. Поэтому я опубликую это здесь:

Код: Выделить всё

cmake_minimum_required(VERSION 3.18)
include_guard(GLOBAL)

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)

set(TARGET_SYSROOT C:/Qt/6.8.0/sysroot)
set(CMAKE_SYSROOT ${TARGET_SYSROOT})

# if you use other version of gcc and g++ than gcc/g++ 9, you must change the following variables
set(CMAKE_C_COMPILER aarch64-none-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER aarch64-none-linux-gnu-g++)

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
set(CMAKE_BUILD_RPATH ${TARGET_SYSROOT})

include(CMakeInitializeConfigs)

function(cmake_initialize_per_config_variable _PREFIX _DOCSTRING)
if (_PREFIX MATCHES "CMAKE_(C|CXX|ASM)_FLAGS")
set(CMAKE_${CMAKE_MATCH_1}_FLAGS_INIT "${QT_COMPILER_FLAGS}")

foreach (config DEBUG RELEASE MINSIZEREL RELWITHDEBINFO)
if (DEFINED QT_COMPILER_FLAGS_${config})
set(CMAKE_${CMAKE_MATCH_1}_FLAGS_${config}_INIT "${QT_COMPILER_FLAGS_${config}}")
endif()
endforeach()
endif()

if (_PREFIX MATCHES "CMAKE_(SHARED|MODULE|EXE)_LINKER_FLAGS")
foreach (config SHARED MODULE EXE)
set(CMAKE_${config}_LINKER_FLAGS_INIT "${QT_LINKER_FLAGS}")
endforeach()
endif()

_cmake_initialize_per_config_variable(${ARGV})
endfunction()
  • Я установил официальную версию ARM Gnu Toolchain 13.3-rel1 для цели AArch64 GNU/Linux (aarch64-none-linux- гну). Я добавил каталог bin в свой PATH
  • Я добавил запуск следующей команды в командной строке: cmake ..\Src -GNinja - DCMAKE_BUILD_TYPE=Выпуск -DINPUT_opengl=es2 -DQT_BUILD_EXAMPLES=OFF -DQT_BUILD_TESTS=OFF -DQT_HOST_PATH=C:/Qt/6.8.0/qt-host -DCMAKE_STAGING_PREFIX=C:/Qt/6.8.0/qt-raspi -DCMAKE_INSTALL_ ПРЕФИКС=/usr /local/qt6 -DCMAKE_TOOLCHAIN_FILE=C:/Qt/6.8.0/toolchain.cmake -DQT_QMAKE_TARGET_MKSPEC=devices/linux-rasp-pi4-aarch64. Это почти такая же командная строка, как показано в вышеупомянутой ссылке.
После запуска команды на шаге 5 Cmake сообщает, что компилятор C++ не может скомпилировать простую тестовую программу. Вывод следующий:

Код: Выделить всё

The C++ compiler

"C:/Program Files (x86)/Arm GNU Toolchain aarch64-none-linux-gnu/13.3 rel1/bin/aarch64-none-linux-gnu-g++.exe"

is not able to compile a simple test program.

It fails with the following output:

Change Dir: C:/Qt/6.8.0/pibuild/CMakeFiles/CMakeTmp

Run Build Command(s):C:/PROGRA~1/CMake/bin/ninja.exe cmTC_016b1 && [1/2] Building CXX object CMakeFiles/cmTC_016b1.dir/testCXXCompiler.cxx.o
[2/2] Linking CXX executable cmTC_016b1
FAILED: cmTC_016b1
cmd.exe /C "cd .  && C:\PROGRA~2\ARMGNU~1\133167~1.3RE\bin\AA14A4~1.EXE --sysroot=C:/Qt/6.8.0/sysroot   CMakeFiles/cmTC_016b1.dir/testCXXCompiler.cxx.o -o cmTC_016b1  -Wl,-rpath,C:/Qt/6.8.0/sysroot && cd ."
C:/PROGRA~2/ARMGNU~1/133167~1.3RE/bin/../lib/gcc/aarch64-none-linux-gnu/13.3.1/../../../../aarch64-none-linux-gnu/bin/ld.exe: cannot find crt1.o: No such file or directory
C:/PROGRA~2/ARMGNU~1/133167~1.3RE/bin/../lib/gcc/aarch64-none-linux-gnu/13.3.1/../../../../aarch64-none-linux-gnu/bin/ld.exe: cannot find crti.o: No such file or directory
C:/PROGRA~2/ARMGNU~1/133167~1.3RE/bin/../lib/gcc/aarch64-none-linux-gnu/13.3.1/../../../../aarch64-none-linux-gnu/bin/ld.exe: cannot find -lm: No such file or directory
collect2.exe: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
Мой вопрос (кроме «Что я делаю не так?»): Почему он не может найти эти библиотеки? Я подтвердил их присутствие в моем системном корневом каталоге /usr/lib/aarch64-linux-gnu. Как видно выше, Cmake правильно передает флаг --sysroot. Нужно ли мне создавать собственный кросс-компилятор с подходящей версией Glibc?


Подробнее здесь: https://stackoverflow.com/questions/791 ... ind-crt1-o
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Кросс-компиляция onnxruntime (x86 в aarch64) с поддержкой CUDA.
    Anonymous » » в форуме Linux
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Кросс-компиляция для AArch64 и OpenCL в Linux
    Anonymous » » в форуме Android
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Кросс-компиляция для AArch64 с использованием Clang, собранного из исходного кода.
    Anonymous » » в форуме C++
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Есть ли способ запустить библиотеку .so (составленную NDK для Android aarch64) в Linux aarch64 (cent7 Arm)?
    Anonymous » » в форуме Linux
    0 Ответы
    50 Просмотры
    Последнее сообщение Anonymous
  • Кросс-компиляция для цели x86-64 freebsd в действиях github?
    Anonymous » » в форуме C++
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Linux»