Сборка Qt из исходного кода с помощью MSYS2 / MinGW 64 - заголовки ICU не найдены

Я выполнил инструкции из MinGW-64-bit, используя вариант A: построить Qt в Оболочка MSYS2 и оболочка Win64 MinGW-w64.

Я скачал исходный код

git clone https://code.qt.io/qt/qt5.git
cd qt5
perl init-repository
git checkout 5.8

После установки всех необходимых компонентов я собираю OpenSSL и ICU - устанавливаю в

  • / USR / местные / openssl
  • / USR / местные / icu

Но оттуда по инструкции не все так однозначно. Заявлено, что для установки некоторых переменных среды используется командная оболочка Windows. Но позже я использую 64-битную оболочку MSYS2, поэтому они не действуют. Вот что я сделал:

export INCLUDE=/usr/local/icu/include:/usr/local/openssl/include
export LIB=/usr/local/icu/lib:/usr/local/openssl/lib
export QMAKESPEC=
export QTDIR=
windows2unix() { local pathPcs=() split pathTmp IFS=\;; read -ra split <<< "$*"; for pathTmp in "${split[@],}"; do pathPcs+=( "/${pathTmp//+([:\\])//}" ); done; echo "${pathPcs[*]}"; }; systemrootP=$(windows2unix "$SYSTEMROOT"); export PATH="$PWD/qtbase/bin:$PWD/gnuwin32/bin:/c/msys64/mingw64/bin:/c/msys64/usr/bin:/c/msys64/usr/local/icu/lib"
export MAKE_COMMAND=

mkdir qt-build
cd qt-build

../qt5/configure -prefix /opt/qt -debug-and-release -opensource -confirm-license -platform win32-g++ -developer-build -icu -I /usr/local/icu/include -opengl desktop -openssl -plugin-sql-odbc -nomake examples -nomake tests

Сценарий настройки останавливается со следующей ошибкой:

ERROR: Feature 'icu' was enabled, but the pre-condition 'libs.icu' failed.

В журнале config.log Qt я обнаружил:

looking for library icu
Trying source 0 (type inline) of library icu ...
 => source failed condition 'config.win32 && !features.shared'.
Trying source 1 (type inline) of library icu ...
+ cd C:\msys64\home\asp\qt-build\qtbase\config.tests\unix\icu && C:\msys64\home\asp\qt-build\qtbase\bin\qmake.exe "CONFIG -= qt debug_and_release app_bundle lib_bundle" "CONFIG += shared console" "LIBS += -licuin -licuuc -licudt" C:/msys64/home/asp/qt5/qtbase/config.tests/unix/icu
+ cd C:\msys64\home\asp\qt-build\qtbase\config.tests\unix\icu && set MAKEFLAGS=& C:/msys64/usr/bin/make
> g++ -c -pipe -fno-keep-inline-dllexport -g -frtti -Wall -Wextra -fexceptions -mthreads -DUNICODE -IC:/msys64/home/asp/qt5/qtbase/config.tests/unix/icu -I. -IC:/msys64/home/asp/qt5/qtbase/mkspecs/win32-g++  -o icu.o C:/msys64/home/asp/qt5/qtbase/config.tests/unix/icu/icu.cpp
> C:/msys64/home/asp/qt5/qtbase/config.tests/unix/icu/icu.cpp:40:28: fatal error: unicode/utypes.h: No such file or directory
>  #include <unicode/utypes.h>
>                             ^
> compilation terminated.
> make: *** [Makefile:155: icu.o] Fehler 1
 => source failed verification.
Trying source 2 (type inline) of library icu ...
 => source failed condition '!config.win32'.
test config.corelib.libraries.icu FAILED

Почему скрипт не находит включений? Я установил их как

  • параметр '-I / usr / local / icu / include'
  • экспорт ВКЛЮЧИТЬ = / usr / local / icu / include: / usr / local / openssl / include

Я тоже пробовал

  • параметр '-I / C / msys64 / usr / local / icu / include'
  • экспорт ВКЛЮЧИТЬ = / C / msys64 / usr / local / icu / include: / C / msys64 / usr / local / openssl / include

Есть ли еще возможность указать компилятору правильный путь INCLUDE?


person aquadev    schedule 27.01.2017    source источник


Ответы (1)


Наконец-то я решил эту проблему!

Я удалил всю папку qt5 и начал с самого начала. Затем я получил следующую ошибку:

looking for library icu
Trying source 0 (type inline) of library icu ...
  => source failed condition 'config.win32 && !features.shared'.
Trying source 1 (type inline) of library icu ...
+ cd C:\msys64\home\asp\qt-build\qtbase\config.tests\unix\icu && C:\msys64\home\asp\qt-build\qtbase\bin\qmake.exe "CONFIG -= qt debug_and_release app_bundle lib_bundle" "CONFIG += shared console" "INCLUDEPATH += C:/msys64/usr/local/icu/include" "LIBS += -licuin -licuuc -licudt" C:/msys64/home/asp/qt5/qtbase/config.tests/unix/icu
+ cd C:\msys64\home\asp\qt-build\qtbase\config.tests\unix\icu && set MAKEFLAGS=& C:/msys64/usr/bin/make clean && set MAKEFLAGS=& C:/msys64/usr/bin/make
> rm -f icu.o
> g++ -c -pipe -fno-keep-inline-dllexport -g -Wall -Wextra -fexceptions -mthreads -DUNICODE -IC:/msys64/home/asp/qt5/qtbase/config.tests/unix/icu -I. -IC:/msys64/usr/local/icu/include -IC:/msys64/home/asp/qt5/qtbase/mkspecs/win32-g++  -o icu.o C:/msys64/home/asp/qt5/qtbase/config.tests/unix/icu/icu.cpp
> g++ -Wl,-subsystem,console -mthreads -o icu.exe icu.o  -licuin -licuuc -licudt 
> C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/6.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -licuin
> C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/6.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -licuuc
> C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/6.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -licudt
> collect2.exe: error: ld returned 1 exit status
> make: *** [Makefile:62: icu.exe] Fehler 1
 => source failed verification.
Trying source 2 (type inline) of library icu ...
  => source failed condition '!config.win32'.
test config.corelib.libraries.icu FAILED

Так что на этот раз заголовки можно было найти! Но теперь библиотека ICU не могла быть связана. Поэтому я добавил -L / C / msys64 / usr / local / icu / lib и попробовал еще раз:

../qt5/configure -prefix /opt/qt -debug-and-release -opensource -confirm-license -platform win32-g++ -developer-build -icu -I /C/msys64/usr/local/icu/include -L /C/msys64/usr/local/icu/lib -opengl desktop -openssl -plugin-sql-odbc -nomake examples -nomake tests

Qt is now configured for building. Just run 'make'.
Once everything is built, you must run 'make install'.
Qt will be installed into 'C:\msys64\opt\qt'
person aquadev    schedule 30.01.2017
comment
Незначительный момент, но C:/msys64/usr/local - плохой выбор для программного обеспечения mingw-w64, вам лучше использовать C:/msys64/mingw64/local или C:/msys64/mingw32/local. - person Ray Donnelly; 26.02.2017