Compilação Estática (Static build) Qt 5.0.2 MinGW
-
Saudações Qt Brasil.
Estou numa busca de 2 meses para resolver meu problema mas não achei a solução ainda.
Segue alguns dos recursos que utilizei:
Para recompilar só o win32-g++ utilizei esses recursos:
http://www.qtcentre.org/wiki/index.php?title=Building_static_Qt_on_Windows#MinGW
http://www.qtcentre.org/wiki/index.php?title=Building_static_Qt_on_Windows_with_MinGW#Qt_4.6_and_newerPara compilar o Qt inteiro utilizei esse recurso:
http://qt-project.org/wiki/Building_Qt_Desktop_for_Windows_with_MinGWNão encontrei um tutorial que usasse a versão 5.0.2 do Qt, por isso necessito de ajuda.
Alguém conhece um jeito de fazer a "Static build" Qt 5.0.2 MinGW ?
Informação adicional:
S.O. Windows 7 -
Você tem todas as "dependências":http://qt.gitorious.org/qt/qt5/blobs/stable/README para o Qt5 instaladas?
Qual erro você está aparecendo?
-
1 - Adicionei a configuração (-static -static-libgcc) na linha 'QMAKE_LFLAGS = ' <QTDIR>\mkspecs\win32-g++\qmake.conf
ficou assim (a linha estava vazia):@ QMAKE_LFLAGS = -static -static-libgcc @
2 - depois executei no Qt 5.0.2 for Desktop (MinGW 4.7)
@>configure -platform win32-g++ -static -release -nomake examples -nomake demos -no-vcproj -no-cetest -qt-sql-mysql -plugin-sql-mysql -no-opengl -no-openvg -no-incredibuild-xge@
3 - prossegui com
@>mingw32-make sub-src@
Não apareceu nenhum erro no processo.
4 - Criei um programa simples
5 - Adicionei o .pro
@CONFIG += static@
6 - Compilei com 'release'.
O Dependency Walker acusa erro no aquivo .exe:
bq. Error: Modules with different CPU types were found.
Warning: At least one delay-load dependency module was not found.
Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.falta desses arquivos:
bq. API-MS-WIN-CORE-COM-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-ERROR-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-ROBUFFER-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-STRING-L1-1-0.DLL
API-MS-WIN-SHCORE-SCALING-L1-1-0.DLL
DCOMP.DLL
GPSVC.DLL -
bq. Se você rodar o programa simples, aparece que erro?
Esse erro ocorre com o programa que é gerado quando você escolhe a opção
File > New File or Project... > Qt Gui Application
Não modifiquei, apenas criei novo projeto e compilei o código. (É a janela vazia sem menus)
bq. Estranho dar falta de DCOMP.DLL (DirectComposition). Seu Windows 7 é 64bits?
Sim.
-
Primeiro não apareceu erro nenhum, abriu normalmente (no meu pc).
Depois verifiquei que a path do windows estava apontando para a pasta de bibliotecas do compilador, como o objetivo da compilação estática é compilar as dll dentro do executável, retirei esse direcionamento da path.
Aparece essa mensagem de "Erro do sistema":
bq. O programa não pode ser iniciado porque está faltando Qt5Core.dll no seu computador. Tente reinstalá-lo para resolver esse problema.
Percebi também que o tamanho do arquivo é de 653KB (ou seja, o programa foi compilado sem as dlls)
...
Quando estava fazendo a recompilação do "win32-g++" percebi que, nos fóruns, falava-se muito em colocar na instrução "configure" do "Qt 5.0.2 for Desktop (MinGW 4.7)" esse comando -> "-no-exceptions", porém a instrução não funcionava nele. -
Bom, pelo erro e pelo tamanho do exe, não compilou estático como você mesmo viu.
Você consegue ver se no diretório do Qt que você compilou estático tem DLL's?
Quem colocou o Qt5 no PATH? Você tem o Qt5 (shared) instalado também?Aqui em casa uso Linux.... mas no trabalho uso Windows 7 64bits.
Vou tentar reproduzir lá amanhã.Mas quando você tem várias versões de Qt instaladas, acho melhor usar o QtCreator, que fica mais fácil de selecionar qual versão você quer usar.
-
bq. Você consegue ver se no diretório do Qt que você compilou estático tem DLL’s?
Não entendi muito bem a pergunta, mas para tentar esclarecer eu instalei o Qt no meu PC com esse executável:
"qt-windows-opensource-5.0.2-mingw47_32-x86-offline.exe"Depois tentei fazer a compilação estática através do "Qt 5.0.2 for Desktop (MinGW 4.7)" (com os passos citados no dia 25 de julho)
bq. Quem colocou o Qt5 no PATH?
Fui eu, pois em alguns artigos diziam que o "Qt 5.0.2 for Desktop (MinGW 4.7)" precisava ter sua biblioteca no PATH para funcionar:
...qt\5.0.2\mingw47_32\binbq. Você tem o Qt5 (shared) instalado também?
Como já deve ter notado, não conheço muita coisa do Qt. Esse "Qt5 (shared)" não sei se tenho instalado, pois não sei o que é.
-
Não entendi muito bem em qual passo estou errado?
bq. 1 – Adicionei a configuração (-static -static-libgcc) na linha ‘QMAKE_LFLAGS = ‘ <QTDIR>\mkspecs\win32-g++\qmake.conf
2 – depois executei no Qt 5.0.2 for Desktop (MinGW 4.7)configure -platform win32-g++ -static -release -nomake examples -nomake demos -no-vcproj -no-cetest -qt-sql-mysql -plugin-sql-mysql -no-opengl -no-openvg -no-incredibuild-xge
3 – prossegui com
mingw32-make sub-src
Não apareceu nenhum erro no processo.
4 – Criei um programa simples
5 – Adicionei o .pro
CONFIG += static
6 – Compilei com ‘release’. -
Antes do passo 3:
@
D:\qt\5.0.2\Src\qtbase>qmake -v
QMake version 3.0
Using Qt version 5.0.2 in D:\qt\5.0.2\mingw47_32\lib@@D:\qt\5.0.2\Src\qtbase>qmake -query
QT_SYSROOT:
QT_INSTALL_PREFIX:D:\qt\5.0.2\mingw47_32
QT_INSTALL_ARCHDATA:D:\qt\5.0.2\mingw47_32
QT_INSTALL_DATA:D:\qt\5.0.2\mingw47_32
QT_INSTALL_DOCS:D:\qt\5.0.2\mingw47_32\doc
QT_INSTALL_HEADERS:D:\qt\5.0.2\mingw47_32\include
QT_INSTALL_LIBS:D:\qt\5.0.2\mingw47_32\lib
QT_INSTALL_LIBEXECS:D:\qt\5.0.2\mingw47_32\libexec
QT_INSTALL_BINS:D:\qt\5.0.2\mingw47_32\bin
QT_INSTALL_TESTS:D:\qt\5.0.2\mingw47_32\tests
QT_INSTALL_PLUGINS:D:\qt\5.0.2\mingw47_32\plugins
QT_INSTALL_IMPORTS:D:\qt\5.0.2\mingw47_32\imports
QT_INSTALL_QML:D:\qt\5.0.2\mingw47_32\qml
QT_INSTALL_TRANSLATIONS:D:\qt\5.0.2\mingw47_32\translations
QT_INSTALL_CONFIGURATION:
QT_INSTALL_EXAMPLES:D:\qt\5.0.2\mingw47_32\examples
QT_INSTALL_DEMOS:D:\qt\5.0.2\mingw47_32\examples
QT_HOST_PREFIX:D:\qt\5.0.2\mingw47_32
QT_HOST_DATA:D:\qt\5.0.2\mingw47_32
QT_HOST_BINS:D:\qt\5.0.2\mingw47_32\bin
QMAKE_SPEC:win32-g++
QMAKE_XSPEC:win32-g++
QMAKE_VERSION:3.0
QT_VERSION:5.0.2@Depois do passo 3:
@D:\qt\5.0.2\Src\qtbase>qmake -v
QMake version 3.0
Using Qt version 5.0.2 in D:\qt\5.0.2\mingw47_32\lib@@D:\qt\5.0.2\Src\qtbase>qmake -query
QT_SYSROOT:
QT_INSTALL_PREFIX:D:\qt\5.0.2\mingw47_32
QT_INSTALL_ARCHDATA:D:\qt\5.0.2\mingw47_32
QT_INSTALL_DATA:D:\qt\5.0.2\mingw47_32
QT_INSTALL_DOCS:D:\qt\5.0.2\mingw47_32\doc
QT_INSTALL_HEADERS:D:\qt\5.0.2\mingw47_32\include
QT_INSTALL_LIBS:D:\qt\5.0.2\mingw47_32\lib
QT_INSTALL_LIBEXECS:D:\qt\5.0.2\mingw47_32\libexec
QT_INSTALL_BINS:D:\qt\5.0.2\mingw47_32\bin
QT_INSTALL_TESTS:D:\qt\5.0.2\mingw47_32\tests
QT_INSTALL_PLUGINS:D:\qt\5.0.2\mingw47_32\plugins
QT_INSTALL_IMPORTS:D:\qt\5.0.2\mingw47_32\imports
QT_INSTALL_QML:D:\qt\5.0.2\mingw47_32\qml
QT_INSTALL_TRANSLATIONS:D:\qt\5.0.2\mingw47_32\translations
QT_INSTALL_CONFIGURATION:
QT_INSTALL_EXAMPLES:D:\qt\5.0.2\mingw47_32\examples
QT_INSTALL_DEMOS:D:\qt\5.0.2\mingw47_32\examples
QT_HOST_PREFIX:D:\qt\5.0.2\mingw47_32
QT_HOST_DATA:D:\qt\5.0.2\mingw47_32
QT_HOST_BINS:D:\qt\5.0.2\mingw47_32\bin
QMAKE_SPEC:win32-g++
QMAKE_XSPEC:win32-g++
QMAKE_VERSION:3.0
QT_VERSION:5.0.2@ -
bq. mas para tentar esclarecer eu instalei o Qt no meu PC com esse executável:
“qt-windows-opensource-5.0.2-mingw47_32-x86-offline.exe”Estes pacotes não têm as bibliotecas estáticas. Você teria que compilar a Qt toda a partir do código fonte e gerar as suas próprias bibliotecas estáticas.