2017-01-27 4 views
1

J'ai suivi les instructions de MinGW-64-bit, en utilisant l'option A: build Qt dans MSYS2-shell & MinGW-w64 Win64 Shell.Création Qt de source avec MSYS2/MinGW 64 - en-têtes ICU non trouvé

J'ai téléchargé le code source

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

Après avoir installé toutes les conditions préalables que je construis OpenSSL et soins intensifs - installé dans

  • /usr/local/OpenSSL
  • /usr/local/ICU

Mais à partir de là sur les instructions ne sont pas si claires. Il est indiqué d'utiliser un shell de commande Windows pour définir certaines variables d'environnement. Mais plus tard, j'utilise le shell MSYS2 64 Bit, donc cela n'a aucun effet. Voici ce que je faisais:

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 

Le script configure arrête avec l'erreur suivante:

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

Dans config.log Qt J'ai trouvé:

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 

Pourquoi ne pas le script trouver les inclus? Je les ai mis en

  • paramètre '-I/usr/local/ICU/include'
  • export Include =/usr/local/ICU/include:/usr/local/OpenSSL/include

J'ai aussi essayé

  • paramètre '-I/C/msys64/usr/local/ICU/include'
  • export Include =/C/msys64/usr/local/ICU/include:/C/msys64/usr/local/openssl/include

Existe-t-il une autre possibilité de donner le chemin INCLUDE correct au compilateur?

Répondre

1

Enfin, j'ai résolu ce problème! J'ai supprimé le dossier complet qt5 et j'ai commencé depuis le début. Alors j'ai eu l'erreur suivante:

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 

Ainsi les en-têtes pourraient être trouvés cette fois! Mais maintenant, la librairie ICU ne pouvait pas être liée. J'ai donc ajouté -L/C/msys64/usr/local/ICU/lib 'et essayé à nouveau:

../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' 
+0

point mineur, mais 'C:/msys64/usr/local' est un mauvais choix pour mingw- Pour le logiciel w64, vous feriez mieux d'utiliser 'C:/msys64/mingw64/local' ou' C:/msys64/mingw32/local'. –