Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Статическая сборка Qt6 (http://forum.oszone.net/showthread.php?t=356030)

RubenRBN 09-01-2025 15:02 3034867

Статическая сборка Qt6
 
Всем привет. Занялся сборкой Qt6 из исходного кода, но в процессе сталкиваюсь с очередными проблемами.
Что было установлено:
1. Ruby - возможно, сам по себе не нужен, но и лишним не будет. А установлен был из-за наличия MSYS64, из которого был установлен mingw-w64-x86_64-toolchain (GCC версии 14.2.0).
2. Ninja и Cmake.
3. Python и библиотека html5lib.
4. Скачал исходник qt-everywhere-src-6.8.1.tar.xz с официального сайта.
Как оказалось, дополнительно желательны: libclang, WinRT и Perl. Новое веселье. И именно тут возникли новые заминки. Расскажу по порядку:
Библиотеки libclang скачал также с сайта Qt (архив libclang-llvmorg-19.1.1-windows-mingw_64.7z) и распаковал в тот же каталог, где исходники. Вопрос: а нужны ли там dll-ки libclang*? На всякий взял их от ранее скачанного Clang и поместил их в "bin". Но после завершения конфигурирования такой отчёт:
"WARNING: LLVM was found, but it was not built with RTTI support"
А что не так? Скачаны с сайта Qt, а значит должны быть совместимы. Это что, получается, "libclang" не пригодится, а понадобится скачать ещё и исходники Clang и из них собирать целиком компилятор?
Я не знаю, критично ли это, важно ли это, но хотелось бы НЕ столкнуться с сюрпризами при разработке приложений в дальнейшем.

WinRT. Поскольку я не мог скачать готовый, то пришлось попробовать скомпилировать из исходников. Но в процессе возникли не известные ошибки:
Код:

FAILED: test/test/CMakeFiles/test-vanilla.dir/missing_required_interfaces.cpp.obj
C:\Ruby32-x64\msys64\mingw64\bin\c++.exe -D_WIN32_WINNT=0x0602 -IC:/cppwinrt/test -IC:/cppwinrt/test/../cppwinrt -IC:/cppwinrt/build/test/cppwinrt -O3 -DNDEBUG -std=gnu++20 -mcx16 -Winvalid-pch -include C:/cppwinrt/build/test/test/CMakeFiles/test-vanilla.dir/cmake_pch.hxx -MD -MT test/test/CMakeFiles/test-vanilla.dir/missing_required_interfaces.cpp.obj -MF test\test\CMakeFiles\test-vanilla.dir\missing_required_interfaces.cpp.obj.d -o test/test/CMakeFiles/test-vanilla.dir/missing_required_interfaces.cpp.obj -c C:/cppwinrt/test/test/missing_required_interfaces.cpp
C:/cppwinrt/test/test/missing_required_interfaces.cpp:5:10: fatal error: winrt/test_component.h: No such file or directory
    5 | #include <winrt/test_component.h>

Тем не менее, файлик cppwinrt.exe появился, но не уверен, что этого достаточно.
Если размер у WinRT небольшой (без тестовой папки!), не могли бы вы поделиться, если таковой у вас есть?

Perl. Вроде бы он не нужен для сборки последних Qt, но желателен для отдельных компонентов. Но его наличие также создавало другие проблемы. Во-первых, он уже поставляется с компиляторами, но не самых последних версий, отчего у меня процесс сборки завершался с ошибкой. Я временно переименовал его директорию и компиляция работала. Но мне не давало покоя, что он может быть нужен, и переименовал обратно, и я удалил папку с его компиляторами, а всё остальное оставил. После этого, хоть и конфигурирование проходило успешно, сборка же завершалась ошибкой, ссылаясь на zlib почему-то. Как оказалось, возникало при вызове syncqt.exe (в build\qtbase\bin). Попытка запустить syncqt.exe завершалось сообщением:
"Точка входа в процедуру _ZNKSt25__codecvt_utf8_utf16_baselwE10do_unshiftERiPcS2_RS2_ не найдена в библиотеке DLL C:\qt-everywhere-src-6.8.1\build\qtbase\bin\syncqt.exe."
Я удалил Perl и это как-то помогло: syncqt теперь запускается без ошибки. Аналогичное было с exe-шником от WinRT.

Python и html5lib. Не смотря на их наличие, они почему-то не обнаружены. Ладно если с qtwebengine я смирился, так как статически его не собрать, но кроме него и qdoc игнорируется.
В переменных средах Python есть. Что не так?

Как проходит компиляция. Из созданной папки "build" я выполняю:
cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DQT_BUILD_STATIC=ON -DCPPWINRT_INCLUDE_DIR=C:/cppwinrt -DLLVM_INSTALL_DIR=C:/qt-everywhere-src-6.8.1/libclang -DINPUT_opengl=desktop -DQT_SYSTEM_zlib=ON -DQT_SYSTEM_png=OFF -DQT_SYSTEM_jpeg=OFF -DBUILD_EXAMPLES=OFF -DQT_BUILD_QTWEBENGINE=OFF -DFEATURE_clang=ON -S ..

После нескольких минут запускаю просто:
cmake --build .
(либо с --parallel, без разницы).

А ради чего вся эта пляска: мне нужен Qt6 в static. Я понимаю, что его наверняка можно получить целиком в том же MSYS64, но у меня кое-какие проблемы с его скачиванием (детали рассказывать не хочу).

Вкратце повторю:
1. Хочу решить проблему с Python и html5lib;
2. Установить готовый WinRT;
3. Perl... Возможно ли установить или настроить, чтобы компиляция и запуск некоторых exe-файлов не завершалось ошибкой?
4. Хотел ещё рекомендаций, может что-то лишнее указал или наоборот чего-то не добавил.

Sham 10-01-2025 07:31 3034900

в MSYS2 всё ставится через pacman вместе со всеми зависимостями. Вручную скачивается отсюда https://packages.msys2.org/packages/ из нужного репозитория https://packages.msys2.org/base/mingw-w64-cppwinrt


Время: 00:45.

Время: 00:45.
© OSzone.net 2001-