Я следую руководству, которое, как я подтвердил, хорошо работает для 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. Это почти такая же командная строка, как показано в вышеупомянутой ссылке.
Код: Выделить всё
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.
Подробнее здесь: https://stackoverflow.com/questions/791 ... ind-crt1-o