|
|||||||
|
Установка Qt 5.15.18 из исходников в Linux
Время создания: 08.02.2026 01:00
Текстовые метки: linux, qt, qt5, сборка исходники, компиляция,
Раздел: Компьютер - Программирование - Язык C++ (Си++) - Библиотека Qt - Инсталляция Qt и сборка проектов
Запись: xintrea/mytetra_syncro/master/base/1770501647l8wq3yyzpw/text.html на raw.githubusercontent.com
|
|||||||
|
|
|||||||
|
Установка делалась из файла: qt-everywhere-opensource-src-5.15.18.tar.xz Файл распакован в каталоге: /opt/qt_5_15_18 В результате появился каталог: /opt/qt_5_15_18/qt-everywhere-src-5.15.18 В нем дана команда конфигурирования: ./configure -prefix /opt/qt_5_15_18 -opensource -confirm-license -release -nomake tests В результате сборка сконфигурировалась для последующей компиляции, но было видно что много компонент не будет собрано. Это на системе, на которой лет десять собирались из исходников всякие программы, и все равно многих библиотек не было установлено. Поэтому были даны команды для доустановки библиотек: apt-get install unixodbc unixodbc-dev libodbc1 odbcinst apt-get install libdouble-conversion-dev apt-get install libxcb-icccm4-dev libxcb-icccm4 apt-get install \ libegl1-mesa-dev \ libgles2-mesa-dev \ libgl1-mesa-dev \ libxcb-xfixes0-dev \ libxrender-dev \ libxi-dev \ libfontconfig1-dev \ libfreetype6-dev \ libxkbcommon-dev \ libxkbcommon-x11-dev
apt-get install libinput-dev libinput10 libinput-bin apt-get install libmd4c-dev libmd4c-html0-dev apt-get install libxkbcommon-x11-dev libxkbcommon-dev libxkbcommon-x11-0 apt-get install libcups2-dev cups cups-client cups-common apt-get install gperf apt-get install flex bison apt-get install liblcms2-dev apt-get install libnss3-dev libnss3 apt-get install libsnappy-dev Далее выяснилось, что стандартные команды очистки настроек сборки ломают исходники: make distclean rm -f config.cache config.status config.log find . -name "Makefile" -delete rm -rf mkspecs/qconfig.pri rm -rf .config.opt .config.cache >./configure -prefix /opt/qt_5_15_18 -opensource -confirm-license -release -nomake tests + cd qtbase + /opt/qt_5_15_18/qt-everywhere-src-5.15.18/qtbase/configure -top-level -prefix /opt/qt_5_15_18 -opensource -confirm-license -release -nomake tests Creating qmake... cat: /opt/qt_5_15_18/qt-everywhere-src-5.15.18/qtbase/qmake/Makefile.unix.unix: Нет такого файла или каталога cat: /opt/qt_5_15_18/qt-everywhere-src-5.15.18/qtbase/qmake/Makefile.unix: Нет такого файла или каталога gmake: *** Нет целей. Останов. Поэтому исходники были удалены и распакованы заново. Затем заново дана команда конфигурирования. По сравнению с предыдущей попыткой конфигурирования практически все компоненты были активированы, и даже появилась новая большая секция: Qt WebEngineCore: Embedded build ......................... no Full debug information ................. no Pepper Plugins ......................... yes Printing and PDF ....................... yes Proprietary Codecs ..................... no Spellchecker ........................... yes Native Spellchecker .................... no WebRTC ................................. yes PipeWire over GIO ...................... no Geolocation ............................ yes WebChannel support ..................... yes Kerberos Authentication ................ no Extensions ............................. yes Support qpa-xcb ........................ no Use ALSA ............................... yes Use PulseAudio ......................... yes Qt WebEngineQml: Support Qt WebEngine Qml ............... yes UI Delegates ........................... yes Test Support ........................... no Qt WebEngineWidgets: Support Qt WebEngine Widgets ........... yes Qt PDF: Support V8 ............................. no Support XFA ............................ no Support XFA-BMP ........................ no Support XFA-GIF ........................ no Support XFA-PNG ........................ no Support XFA-TIFF ....................... no Bitcode support ........................ no Use static runtime ..................... no Qt PDF Widgets: Support Qt PDF Widgets ................. yes Далее в том же каталоге дана команда сборки: make -j 8 В самом выхлопе .confugure было написано, что для запуска компиляции надо дать команду gmake (именно gmake а не qmake!). Но оказалось, что gmake - это линк на обычный make: >ls -la /usr/bin/gmake lrwxrwxrwx 1 root root 4 апр 10 2021 /usr/bin/gmake -> make Поэтому команда make - это правильная команда. Опции -j 8 - это параллельная компиляция в 8 потоков. Сборка завершается успешно. Далее при попытке выполнить make install от root, возникает ошибка: /opt/qt_5_15_18/qt-everywhere-src-5.15.18/qtbase/bin/qmake -install qinstall /opt/qt_5_15_18/qt-everywhere-src-5.15.18/qtquick3d/lib/cmake/Qt5Quick3DAssetImport/Qt5Quick3DAssetImport_UipAssetImporterPlugin.cmake /opt/qt_5_15_18/lib/cmake/Qt5Quick3DAssetImport/Qt5Quick3DAssetImport_UipAssetImporterPlugin.cmake make[5]: выход из каталога «/opt/qt_5_15_18/qt-everywhere-src-5.15.18/qtquick3d/src/plugins/assetimporters/uip» cd assimp/ && ( test -e Makefile || /opt/qt_5_15_18/qt-everywhere-src-5.15.18/qtbase/bin/qmake -o Makefile /opt/qt_5_15_18/qt-everywhere-src-5.15.18/qtquick3d/src/plugins/assetimporters/assimp/assimp.pro ) && make -f Makefile install Project ERROR: Library 'assimp' is not defined. make[4]: *** [Makefile:85: sub-assimp-install_subtargets] Ошибка 3 make[4]: выход из каталога «/opt/qt_5_15_18/qt-everywhere-src-5.15.18/qtquick3d/src/plugins/assetimporters» make[3]: *** [Makefile:59: sub-assetimporters-install_subtargets] Ошибка 2 make[3]: выход из каталога «/opt/qt_5_15_18/qt-everywhere-src-5.15.18/qtquick3d/src/plugins» make[2]: *** [Makefile:206: sub-plugins-install_subtargets-ordered] Ошибка 2 make[2]: выход из каталога «/opt/qt_5_15_18/qt-everywhere-src-5.15.18/qtquick3d/src» make[1]: *** [Makefile:62: sub-src-install_subtargets] Ошибка 2 make[1]: выход из каталога «/opt/qt_5_15_18/qt-everywhere-src-5.15.18/qtquick3d» make: *** [Makefile:378: module-qtquick3d-install_subtargets] Ошибка 2 Почему-то configure не проверяет наличие библиотеки и заголовков libassimp. Для устранения ошибки дана команда: apt-get install libassimp-dev И снова дана команда: make install Но ошибка все равно осталась та же самая. Поэтому дана команда: make uninstall Она завершится ошибкой, и часть каталогов в /opt/qt_5_15_18 останется. Их надо удалить вручную, кроме каталога qt-everywhere-src-5.15.18. Далее надо зайти в каталог /opt/qt_5_15_18/qt-everywhere-src-5.15.18, и выполнить команду: make clean Эта команда, скорее всего, тоже завершится ошибкой. Похоже, что в Qt напрочь разломаны стандартные инструменты управления исходниками и артефактами сборки. Поэтому нужно полностью удалить каталог с исходниками, распаковать архив снова, и опять выполнить сборку, как это написано в начале статьи. На этот раз библиотека libassimp и ее заголовки будут стоять, и сборка с установкой должны произойти правильно... Нет, сборка опять без ошибок, а установка - с ошибкой. Видимо, надо отключать сборку пакета qtquick3d. (За это время в систему были установлены пакеты в llvm и libclang-dev с попыткой активировать сборку QDoc). Для этого снова дана команда .configure, но уже с опцией -skip: ./configure -skip qtquick3d -prefix /opt/qt_5_15_18 -opensource -confirm-license -release -nomake tests В эту опцию надо так же добавить отключение сборки то ли chromium browser то ли qtwebengine, потому что если в системе есть llvm, то будет активирована сборка целого браузера, и на четырехядернике Qt будет собираться более 12 часов. Возможно, браузер входит в примеры, и надо отключать сборку примеров. Вообще сборка засисает на команде: [24677/24764] /usr/bin/g++ -MMD -MF obj/qtwebengine_spellcheck_sources/spellcheck_service.o.d -DUSE_UDEV -DUSE_AURA=1 -DUSE_NSS_CERTS=1 -DUSE_OZONE=1 -DOFFICIAL_BUILD -DTOOLKIT_QT -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DNO_UNWIND_TABLES -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DNDEBUG -DNVALGRIND -DDYNAMIC_ANNOTATIONS_ENABLED=0 -DUSE_EGL -DU_USING_ICU_NAMESPACE=0 -DU_ENABLE_DYLOAD=0 -DUSE_CHROMIUM_ICU=1 -DU_ENABLE_TRACING=1 -DU_ENABLE_RESOURCE_TRACING=0 -DU_STATIC_IMPLEMENTATION -DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_FILE -DUCHAR_TYPE=uint16_t -DV8_COMPRESS_POINTERS -DV8_31BIT_SMIS_ON_64BIT_ARCH -DV8_DEPRECATION_WARNINGS -DV8_REVERSE_JSARGS -DGOOGLE_PROTOBUF_NO_RTTI -DGOOGLE_PROTOBUF_NO_STATIC_INITIALIZER -DHAVE_PTHREAD -DSK_CODEC_DECODES_PNG -DSK_CODEC_DECODES_WEBP -DSK_ENCODE_PNG -DSK_ENCODE_WEBP -DSK_USER_CONFIG_HEADER=\"../../skia/config/SkUserConfig.h\" -DSK_GL -DSK_CODEC_DECODES_JPEG -DSK_ENCODE_JPEG -DSK_USE_LIBGIFCODEC -DSK_VULKAN_HEADER=\"../../skia/config/SkVulkanConfig.h\" -DSK_VULKAN=1 -DSK_SUPPORT_GPU=1 -DSK_GPU_WORKAROUNDS_HEADER=\"gpu/config/gpu_driver_bug_workaround_autogen.h\" -DWEBRTC_NON_STATIC_TRACE_EVENT_HANDLERS=0 -DWEBRTC_CHROMIUM_BUILD -DWEBRTC_POSIX -DWEBRTC_LINUX -DABSL_ALLOCATOR_NOTHROW=1 -DWEBRTC_USE_BUILTIN_ISAC_FIX=0 -DWEBRTC_USE_BUILTIN_ISAC_FLOAT=1 -DHAVE_SCTP -DNO_MAIN_THREAD_WRAPPING -DCRASHPAD_ZLIB_SOURCE_EXTERNAL -DUSE_SYSTEM_ZLIB=1 -DLEVELDB_PLATFORM_CHROMIUM=1 -DLEVELDB_PLATFORM_CHROMIUM=1 -DHUNSPELL_STATIC -DHUNSPELL_CHROME_CLIENT -DUSE_HUNSPELL -I/opt/qt_5_15_18/qt-everywhere-src-5.15.18/qtwebengine/src/core/service -Igen -I../../3rdparty/chromium -I../../3rdparty/chromium/third_party/boringssl/src/include -I../../3rdparty/chromium/third_party/perfetto/include -Igen/third_party/perfetto/build_config -Igen/third_party/perfetto -Igen -Igen -I../../3rdparty/chromium/third_party/libyuv/include -Igen -I../../3rdparty/chromium/third_party/jsoncpp/source/include -Igen -Igen -Igen -Igen -I../../3rdparty/chromium/third_party/vulkan_headers/include -Igen -Igen -I../../3rdparty/chromium/third_party/khronos -I../../3rdparty/chromium/gpu -Igen/third_party/dawn/src/include -I../../3rdparty/chromium/third_party/dawn/src/include -Igen -I../../3rdparty/chromium/third_party/abseil-cpp -I../../3rdparty/chromium/third_party/protobuf/src -Igen/protoc_out -I../../3rdparty/chromium/third_party/ced/src -I../../3rdparty/chromium/third_party/icu/source/common -I../../3rdparty/chromium/third_party/icu/source/i18n -I../../3rdparty/chromium/v8/include -Igen/v8/include -I../../3rdparty/chromium/third_party/protobuf/src -I../../3rdparty/chromium/third_party/skia -I../../3rdparty/chromium/third_party/libgifcodec -I../../3rdparty/chromium/third_party/vulkan/include -I../../3rdparty/chromium/third_party/vulkan_headers/include -I../../3rdparty/chromium/third_party/webrtc_overrides -I../../3rdparty/chromium/third_party/webrtc -Igen/third_party/webrtc -I../../3rdparty/chromium/third_party/crashpad/crashpad -I../../3rdparty/chromium/third_party/crashpad/crashpad/compat/non_mac -I../../3rdparty/chromium/third_party/crashpad/crashpad/compat/linux -I../../3rdparty/chromium/third_party/crashpad/crashpad/compat/non_win -I../../3rdparty/chromium/third_party/mesa_headers -I../../3rdparty/chromium/third_party/libwebm/source -I../../3rdparty/chromium/third_party/leveldatabase -I../../3rdparty/chromium/third_party/leveldatabase/src -I../../3rdparty/chromium/third_party/leveldatabase/src/include -fno-strict-aliasing --param=ssp-buffer-size=4 -fstack-protector -fno-unwind-tables -fno-asynchronous-unwind-tables -fPIC -pipe -pthread -m64 -Wall -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -Wno-unused-local-typedefs -Wno-maybe-uninitialized -Wno-deprecated-declarations -fno-delete-null-pointer-checks -Wno-comments -Wno-packed-not-aligned -Wno-dangling-else -Wno-missing-field-initializers -Wno-unused-parameter -O2 -fno-ident -fdata-sections -ffunction-sections -fno-omit-frame-pointer -g0 -fvisibility=hidden -I/usr/include/nss -I/usr/include/nspr -std=gnu++14 -Wno-narrowing -Wno-class-memaccess -Wno-attributes -Wno-class-memaccess -Wno-subobject-linkage -Wno-invalid-offsetof -Wno-return-type -Wno-deprecated-copy -fno-exceptions -fno-rtti -fvisibility-inlines-hidden -Wno-deprecated-declarations -c ../../3rdparty/chromium/chrome/browser/spellchecker/spellcheck_service.cc -o obj/qtwebengine_spellcheck_sources/spellcheck_service.o Сейчас идет третий день, когда я пытаюсь скомпилировать Qt. Компиляция Qt - это дело не быстрое, ни разу не было так, чтобы Qt собрался без проблем. Далее эта запись будет пополняться по мере поступления новой информации. Теперь в исключения добавлен qtwebengine и qtwayland. ./configure -skip qtquick3d -skip qtwebengine -skip qtwayland -prefix /opt/qt_5_15_18 -opensource -confirm-license -release -nomake tests Теперь сборка прошла, и make install сработал. Но собранная программа с помощью этого фреймверка сегфолтится с ошибкой: Could not find the Qt platform plugin "xcb" in "" This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem. Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, webgl. Возможно, что в опции конфигуратора надо добавлять: -xcb -qt-xcb -system-xcb -xcb-xlib -feature-xcb -no-opengl Видимо, надо просто опцию -xcb всегда при сборке под Linux указывать. То есть, полная команда конфигурирования будет выглядеть так: ./configure -xcb -skip qtquick3d -skip qtwebengine -skip qtwayland -prefix /opt/qt_5_15_18 -opensource -confirm-license -release -nomake tests Нет, этой опции недостаточно, при конфигуировании возникает ошибка: ERROR: Feature 'xcb' was enabled, but the pre-condition 'features.thread && libs.xcb && tests.xcb_syslibs && features.xkbcommon-x11' failed. Говорят, надо добавит опцию -xcb-xlib: ./configure -xcb-xlib -xcb -skip qtquick3d -skip qtwebengine -skip qtwayland -prefix /opt/qt_5_15_18 -opensource -confirm-license -release -nomake tests Нет, та же самая ошибка. Устанавливаются заголовки: apt-get install libxcb1-dev libxcb-xinerama0-dev libxcb-keysyms1-dev \ libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev \ libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev \ libxcb-render-util0-dev libxcb-render0-dev libxcb-xkb-dev \ libxkbcommon-dev libxkbcommon-x11-dev libx11-dev libx11-xcb-dev \ libxext-dev libxrender-dev После их установки ошибка сохранилась. Но! Ошибка исчезает если полностью удалить каталог с исходниками и снова их распаковать. Тогда конфигурирование происходит без ошибок. Итак, команда конфигурирования такая: ./configure -xcb-xlib -xcb -skip qtquick3d -skip qtwebengine -skip qtwayland -prefix /opt/qt_5_15_18 -opensource -confirm-license -release -nomake tests Надо снова компилировать. Дана команда gmake (не qmake!): gmake -j 8 Скомпилировалось без ошибок. Установка: make install Установка успешна. Для теста была скомпилирована Qt-программа, и она успешно запустилась. |
|||||||
|
Так же в этом разделе:
|
|||||||
|
|||||||
|
|||||||
|