QT 6.8.3 Крест-компиляция для RPI 4 64-бит: сборка сбой с битами/wchar2-decl.h не найденLinux

Ответить Пред. темаСлед. тема
Anonymous
 QT 6.8.3 Крест-компиляция для RPI 4 64-бит: сборка сбой с битами/wchar2-decl.h не найден

Сообщение Anonymous »

Цель:
Я пытаюсь перекрестно компилировать QT 6.8.3 для Raspberry Pi 4 (64-разрядная книжная червя Raspberry Pi OS) от хост-машины Ubuntu 22.04. Конечная цель состоит в том, чтобы построить QgroundControl .
Текущее состояние:
после обширного устранения неполадок (включая создание пользовательского pkgconf , тщательного создания Sysroot и подробного Cmake Toolchain , я имею управление, чтобы получить Complective Sciplure. Он генерирует файлы сборки и отчеты: < /p>

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

-- Generating done
-- Build files have been written to: /home/jarvis/qt-raspi-build
< /code>
Это означает обнаружение функций высокого уровня для GSTREAMER, OpenGL ES2, PKG-CONFIG и т. Д., Похоже, проходит на этапе конфигурации. -Параллель $ (nproc) 
, сборка не работает очень рано (около шага 140-150 ~ 11 000) при составлении файлов из qtbase/src/corelib (например, QmimeTypeParser.cpp ) с ошибкой:

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

/home/jarvis/rpi-sysroot/usr/include/wchar.h:868:11: fatal error: bits/wchar2-decl.h: No such file or directory
868 | # include 
Аналогичная ошибка (bits/stdio2-decl.h: нет такого файла или каталога) также произошла для компонентов Harfbuzz в более ранних попытках построения после успешной настройки.

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

My Setup Details:

Host System: Ubuntu 22.04
Target System: Raspberry Pi 4, Raspberry Pi OS Bookworm (64-bit)
Qt Version: 6.8.3 (source from qt-everywhere-src-6.8.3.tar.xz)
Cross-Compiler Toolchain (Host): gcc-aarch64-linux-gnu and g++-aarch64-linux-gnu (version 11.4.0, default from Ubuntu 22.04 apt).
Host Qt: Qt 6.8.3 installed via online installer at ~/Qt/6.8.3/gcc_64 (for host tools).
Sysroot (Host):
Located at ~/rpi-sysroot.
Created by rsync --delete -avz copying /lib, /usr/lib, /usr/include, /usr/lib/aarch64-linux-gnu/pkgconfig, and /usr/share/pkgconfig from the fully updated Pi (after all dependencies below were installed).
Symlinks fixed using sysroot-relativelinks.py.
Confirmed ~/rpi-sysroot/usr/include/aarch64-linux-gnu/bits/wchar2-decl.h (and stdio2-decl.h) exist.
Custom pkgconf (Host):
pkgconf v2.1.1 built from source.
Configured with: ./configure --prefix=/usr/local/cross-pkgconf --with-sysroot-dir=/home/jarvis/rpi-sysroot --with-pkg-config-dir=/home/jarvis/rpi-sysroot/usr/lib/aarch64-linux-gnu/pkgconfig:/home/jarvis/rpi-sysroot/usr/share/pkgconfig --disable-shared --enable-static
Installed to /usr/local/cross-pkgconf/bin/pkgconf.
This custom pkgconf successfully finds gst-play-1.0 (with a manually created .pc file) when tested directly with debug flags.
Manual gst-play-1.0.pc on Pi (and in Sysroot):
Created at /usr/lib/aarch64-linux-gnu/pkgconfig/gst-play-1.0.pc on the Pi (and synced to sysroot) as it was missing. Content:
Code snippet

prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib/aarch64-linux-gnu
includedir=${prefix}/include/gstreamer-1.0

Name: GStreamer Playback Library
Description: GStreamer Playback Library
Version: 1.22.0 # Matched to Pi's GStreamer version
Requires: gstreamer-1.0 >= 1.22.0, gstreamer-video-1.0 >= 1.22.0
Libs: -L${libdir} -lgstplay-1.0
Cflags: -I${includedir}

Comprehensive Dependencies on Pi:

Installed an extensive list of -dev packages on the Pi, including libc6-dev, all GStreamer plugins (base, good (runtime), bad, ugly (runtime), libav), EGL/GLES2/Mesa/DRM/GBM, XCB (many specific dev packages), font/image libs, protobuf-compiler, libprotobuf-dev, etc.  ccache has been purged from the host.
файл инструментов Cmake (~/rpi-toolchain-qt-wiki.cmake):
# CMake Toolchain file for Raspberry Pi 64-bit

cmake_minimum_required(VERSION 3.18)
include_guard(GLOBAL)

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)

set(CMAKE_SYSROOT /home/jarvis/rpi-sysroot) # Absolute path

set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)
set(CMAKE_ASM_COMPILER aarch64-linux-gnu-gcc)
set(CMAKE_LINKER aarch64-linux-gnu-ld) # Explicitly set linker

# Force sysroot for the linker and compiler
set(CMAKE_C_FLAGS_INIT "--sysroot=\{CMAKE\_SYSROOT\}" CACHE STRING "" FORCE\)
set\(CMAKE\_CXX\_FLAGS\_INIT "\-\-sysroot\={CMAKE_SYSROOT}" CACHE STRING "" FORCE)
set(CMAKE_EXE_LINKER_FLAGS_INIT "--sysroot=\{CMAKE\_SYSROOT\}"\)
set\(CMAKE\_SHARED\_LINKER\_FLAGS\_INIT "\-\-sysroot\={CMAKE_SYSROOT}")
set(CMAKE_MODULE_LINKER_FLAGS_INIT "--sysroot=${CMAKE_SYSROOT}")

# Where to find the target environment
set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT})
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)

# Try to prevent searching ANY host paths
set(CMAKE_FIND_USE_CMAKE_SYSTEM_PATH NO)
set(CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH NO)
set(CMAKE_FIND_USE_CMAKE_PATH NO)
set(CMAKE_FIND_USE_CMAKE_INSTALL_PREFIX NO)

# Explicitly set CMake include paths that find_path() will search.
# With CMAKE_SYSROOT and CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY,
# these should be treated as paths *within* the sysroot.
set(CMAKE_INCLUDE_PATH
/usr/include
/usr/include/aarch64-linux-gnu
)
set(CMAKE_LIBRARY_PATH
/usr/lib/aarch64-linux-gnu
/lib/aarch64-linux-gnu
)

# Use our custom-built pkgconf
set(PKG_CONFIG_EXECUTABLE /usr/local/cross-pkgconf/bin/pkgconf CACHE FILEPATH "Path to pkg-config executable")

Qt configure Command (this successfully completed configuration):
# Executed from an empty '~/qt-raspi-build' directory
PKG_CONFIG=/usr/local/cross-pkgconf/bin/pkgconf \
PKG_CONFIG_SYSROOT_DIR=~/rpi-sysroot \
PKG_CONFIG_LIBDIR=~/rpi-sysroot/usr/lib/aarch64-linux-gnu/pkgconfig:~/rpi-sysroot/usr/share/pkgconfig \
../qt-everywhere-src-6.8.3/configure -release -opensource -confirm-license \
-platform linux-g++ \
-device linux-rasp-pi4-aarch64 \
-device-option CROSS_COMPILE=aarch64-linux-gnu- \
-prefix ~/rpi-qt \
-extprefix ~/rpi-qt \
-qt-host-path ~/Qt/6.8.3/gcc_64 \
-nomake examples -nomake tests \
-no-pch \
-DCMAKE_TOOLCHAIN_FILE=/home/jarvis/rpi-toolchain-qt-wiki.cmake \
-DCMAKE_SYSROOT=/home/jarvis/rpi-sysroot \
-DQT_BUILD_TOOLS_WHEN_CROSSCOMPILING=ON \
-DQT_FEATURE_opengles2=ON \
-DQT_FEATURE_pkg_config=ON \
-DQT_FEATURE_gstreamer=ON \
-DQT_FEATURE_system_libjpeg=ON \
-DQT_FEATURE_system_libpng=ON \
-DQT_FEATURE_system_zlib=ON \
-DQT_FEATURE_icu=OFF \
-DQT_FEATURE_xcb=ON \
-DQT_FEATURE_xkbcommon=ON \
-DQT_FEATURE_libinput=ON \
-DQT_FEATURE_vulkan=OFF \
-skip qtwebengine \
-verbose
< /code>
Failing Commile Command Fronipt (из вывода ниндзя во время Cmake -build. Для QmimeTypeParser.cpp): < /p>
/usr/bin/c++ -DBACKTRACE_HEADER=\"execinfo.h\" -DCMAKE_SYSROOT=/home/jarvis/rpi-sysroot -DCMAKE_TOOLCHAIN_FILE=/home/jarvis/rpi-toolchain-qt-wiki.cmake -DCore_EXPORTS -DELF_INTERPRETER=\"/lib64/ld-linux-x86-64.so.2\" -DQT_ASCII_CAST_WARNINGS -DQT_BUILDING_QT -DQT_BUILD_CORE_LIB -DQT_BUILD_TOOLS_WHEN_CROSSCOMPILING=ON -DQT_DEPRECATED_WARNINGS -DQT_EXPLICIT_QFILE_CONSTRUCTION_FROM_PATH -DQT_FEATURE_gstreamer=ON -DQT_FEATURE_icu=OFF -DQT_FEATURE_libinput=ON -DQT_FEATURE_opengles2=ON -DQT_FEATURE_pkg_config=ON -DQT_FEATURE_system_libjpeg=ON -DQT_FEATURE_system_libpng=ON -DQT_FEATURE_system_zlib=ON -DQT_FEATURE_vulkan=OFF -DQT_FEATURE_xcb=ON -DQT_FEATURE_xkbcommon=ON -DQT_LEAN_HEADERS=1 -DQT_MOC_COMPAT -DQT_NO_CAST_TO_ASCII -DQT_NO_CONTEXTLESS_CONNECT -DQT_NO_DEBUG -DQT_NO_FOREACH -DQT_NO_JAVA_STYLE_ITERATORS -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT -DQT_NO_QASCONST -DQT_NO_QEXCHANGE -DQT_NO_QPAIR -DQT_NO_QSNPRINTF -DQT_NO_USING_NAMESPACE -DQT_TYPESAFE_FLAGS -DQT_USE_NODISCARD_FILE_OPEN -DQT_USE_QSTRINGBUILDER -D_GLIBCXX_ASSERTIONS -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -I/home/jarvis/qt-raspi-build/qtbase/src/corelib/Core_autogen/include -I/home/jarvis/qt-raspi-build/qtbase/include -I/home/jarvis/qt-raspi-build/qtbase/include/QtCore -I/home/jarvis/qt-everywhere-src-6.8.3/qtbase/src/corelib -I/home/jarvis/qt-raspi-build/qtbase/src/corelib -I/home/jarvis/qt-raspi-build/qtbase/src/corelib/global -I/home/jarvis/qt-raspi-build/qtbase/src/corelib/kernel -I/home/jarvis/qt-everywhere-src-6.8.3/qtbase/src/corelib/../3rdparty/tinycbor/src -I/home/jarvis/qt-raspi-build/qtbase/include/QtCore/6.8.3 -I/home/jarvis/qt-raspi-build/qtbase/include/QtCore/6.8.3/QtCore -I/home/jarvis/qt-everywhere-src-6.8.3/qtbase/src/corelib/../3rdparty/double-conversion/double-conversion -I/home/jarvis/qt-everywhere-src-6.8.3/qtbase/src/corelib/../3rdparty/double-conversion -I/home/jarvis/qt-everywhere-src-6.8.3/qtbase/src/corelib/../3rdparty/forkfd -I/home/jarvis/qt-raspi-build/qtbase/src/corelib/.rcc -I/home/jarvis/qt-everywhere-src-6.8.3/qtbase/mkspecs/linux-g++ -isystem /home/jarvis/rpi-sysroot/usr/include -isystem /home/jarvis/rpi-sysroot/usr/include/glib-2.0 -isystem /home/jarvis/rpi-sysroot/usr/lib/aarch64-linux-gnu/glib-2.0/include -DNDEBUG -O3 -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -Wall -Wextra -fexceptions -U_FORTIFY_SOURCE -Wsuggest-override -fcf-protection=full -D_FORTIFY_SOURCE=3 -fstack-protector-strong -fstack-clash-protection -std=gnu++17 -MD -MT qtbase/src/corelib/CMakeFiles/Core.dir/mimetypes/qmimetypeparser.cpp.o -MF qtbase/src/corelib/CMakeFiles/Core.dir/mimetypes/qmimetypeparser.cpp.o.d -o qtbase/src/corelib/CMakeFiles/Core.dir/mimetypes/qmimetypeparser.cpp.o -c /home/jarvis/qt-everywhere-src-6.8.3/qtbase/src/corelib/mimetypes/qmimetypeparser.cpp
< /code>
(Примечание: Фактический компилятор-это Aarch64-linux-gnu-g ++ из-за настройки инструмента, даже если /usr /bin /c ++ показан в вызовах Ninja, который затем решается с помощью Cmake) < /p>
provense whip2 speakers in in fasters in valles in in sufficers). Само обнаружение не удалось, или когда впервые появилась эта ошибка/... выходы CmakeError.log и компиляции показали, что кросс-компилятор пытался включить стандартные заголовки библиотеки C ++ из хост-системы (например,/usr/include/x86_64-linux-gnu/c ++/11/...) во время внутренней проверки Cmake's Internal Trest. Это указывает на загрязнение включающих путей, несмотря на Sysroot Settings. Файл битов/wchar2-decl.h существует в правильном пути, специфичной для архитектуры в Sysroot (~/rpi-sysroot/usr/include/aarch64-linux-gnu/bits /).
Файл инструментов устанавливает cmake_sysroot и adds-sysroot = $ {cmake_sysroot_sysroot_sysroot_sysroot_sysroot_sysroot_sysroot. Cmake_cxx_flags_init. Линия компиляции также включает пути -исистемные пути, указывающие на Sysroot. However, the earlier CMakeError.log observation about host C++ stdlib headers being included (e.g., from /usr/include/x86_64-linux-gnu/c++/11) during some compilation steps suggests that the compiler's include search mechanism is not being strictly confined to the sysroot for all types of includes (especially C standard library internal bits/... files and potentially C++ standard library Заголовки).
Какие конкретные переменные cmake, настройки инструментов или настройки QT необходимы для обеспечения исключительно кросс-компилятора и правильного использования Sysroot для разрешения всех стандартных библиотеков, включая эти внутренние биты/... Заголовки и стандартные заголовки C ++, и полностью избегает хост-системы во время фактической фазы строительных файлов qt-источников?>

Подробнее здесь: https://stackoverflow.com/questions/796 ... decl-h-not
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • QT 6.8.3 Крест-компиляция для RPI 4 64-бит: сборка сбой с битами/wchar2-decl.h не найден
    Anonymous » » в форуме C++
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Кросс-компиляция RPi с разницей в символах Arm-Linux-gnueabihi libstdc++
    Anonymous » » в форуме C++
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Кросс-компиляция RPi с разницей в символах Arm-Linux-gnueabihi libstdc++
    Anonymous » » в форуме C++
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Декартовский крест присоединяется к Доктрине
    Anonymous » » в форуме Php
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Декартовский крест присоединяется к Доктрине
    Anonymous » » в форуме Php
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous

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