Ligação e implementação estática do Qt

Eu estou tentando implantar (liberar para o público) um aplicativo qt simples que fiz recentemente, mas ficou preso em qt libs de binding estática.

Eu segui o guia em qt docs para re-construir qt e meu aplicativo estaticamente. Mas o lançamento ainda exigem qtgui / qtcore dll sem motivos aparentes, gostaria de saber se alguém já viu esse tipo de problema antes? Ou melhor ainda, resolveu com sucesso?

http://doc.qtsoftware.com/4.5/deployment-windows.html

Eu escrevi um guia para a binding estática

e como construir Qt estático com múltiplos compiladores e mantê-lo pequeno

(porque pode ficar muito grande, especialmente para programas simples). Você também pode querer verificar o instalador BitRock, que é gratuito para projetos de código aberto.

Resumindo, acaba sendo um pouco mais complexo se você estiver usando qualquer coisa que o Qt pense como um plugin, como suporte para a maioria dos tipos de imagem (JPEG, GIF) ou bancos de dados. Por exemplo, se você deseja include suporte para imagens Oracle DBMS e GIF para seus icons, adicione o seguinte ao seu arquivo .PRO:

 QTPLUGIN += qsqloci qgif CONFIG += static 

Você precisará então:

 #include  

em seu projeto e importe todos os plugins usados. Você precisa alterar essas configurações de volta para obtê-lo para compilar com vinculação dinâmica novamente (como ao depurar ou adicionar resources), embora isso possa ser facilmente automatizado. Há também considerações ao construir as bibliotecas do Qt para uso com links estáticos, embora as instruções do Qt, pelo menos, o iniciem.

Com o Qt 5.5, as coisas são bem fáceis. Existem as seguintes configurações ortogonais que você passa para configure ao construir o Qt:

  1. Você quer uma biblioteca Qt estática?

    opção -static deve ser passada para configure

  2. Você quer que a compilation do Qt e do seu aplicativo use um tempo de execução C ++ estático?

    -static-runtime opção -static-runtime deve ser passada para configure

  3. Você quer a segmentação do XP?

    -target xp opção -target xp deve ser passada para configure

    Além disso, siga as instruções desta postagem do blog .

    O Qt Creator não suportou o direcionamento automático do XP pelo menos até a v.3.5.0, já que ele não configura o ambiente para as ferramentas de criação corretamente. Você precisa modificar manualmente o ambiente de compilation de acordo com a postagem do blog .

Além disso, esteja ciente de que sua compilation estática ainda estará vinculada aos tempos de execução do visual studio dinamicamente!

Veja este faq ( link de arquivo da internet, caso o link desapareça ):

Por que um Qt estaticamente construído usa as bibliotecas de tempo de execução dinâmicas do Visual Studio? Eu preciso implantar aqueles com meu aplicativo?

O Qt é construído usando o comutador -MD (d), que se liga às bibliotecas dinâmicas de tempo de execução C / C ++. Isso é necessário, pois temos problemas de memory ao usar qualquer coisa, exceto o sinalizador -MD (d) e, em geral, é recomendável usá-lo. Você não deve alterar este flag você mesmo para o seu aplicativo, porque ele entra em conflito com o modo como a biblioteca Qt é construída se você alterar o flag para -MT. Você não deve alterá-lo para o Qt, pois é provável que cause problemas.

O Qt ainda é construído estaticamente ao usar a opção -static, o que significa que você não precisa distribuir as dlls do Qt ao implementar seu aplicativo. Você terá que distribuir os tempos de execução C (se eles ainda não existirem na máquina de destino), consulte nossa documentação de implementação http://doc.qt.io/qt-5/windows-deployment.html#application-dependencies .

Eu apenas compilei uma aplicação estaticamente (Debug) com QT Plugins (5.9), com VS (2015) (Win).

a) Adicione ao seu código.

 #include  Q_IMPORT_PLUGIN (QWindowsIntegrationPlugin); 

b) Adicione o seguinte aos caminhos de link

 \5.9.0_x86_static_install\lib \5.9.0_x86_static_install\bin \5.9.0_x86_static_install\plugins \5.9.0_x86_static_install\plugins\platforms \5.9.0_x86_static_install\plugins\imageformats 

c) Adicione a lista de bibliotecas estáticas do QT e bibliotecas internas do VS à sua lista de links.

 version.lib imm32.lib shlwapi.lib rpcrt4.lib Ws2_32.lib Mpr.lib Netapi32.lib Rpcrt4.lib Iphlpapi.lib winmm.lib gdi32.lib advapi32.lib msimg32.lib UxTheme.lib translatord.lib preprocessord.lib d3d9.lib dxguid.lib libEGLd.lib libGLESv2d.lib iphlpapi.lib psapi.lib ws2_32.lib Dwmapi.lib Qt5CoreD.lib Qt5Guid.lib Qt5Xmld.lib Qt5Widgetsd.lib Qt5Networkd.lib Qt5Winextrasd.lib Qt5PlatformCompositorSupportd.lib qicod.lib qtmaind.lib qtlibpngd.lib qtharfbuzzd.lib qtpcre2d.lib qwindowsd.lib Qt5FontDatabaseSupportd.lib Qt5ThemeSupportd.lib Qt5EventDispatcherSupportd.lib Qt5AccessibilitySupportd.lib qtfreetyped.lib 

Kevin Higgins

msys2 tem um pacote Qt5 estático pré-construído

… Que, usando o CMake, quando a propriedade de destino CMAKE_AUTOSTATICPLUGINS é definida, também vincula todos os plug-ins disponíveis. (isso, atualmente, só é habilitado através de patches downstream, não oficiais, mas atinge o objective)

Se você usa o qmake, pelo menos você poupa o esforço para construir você mesmo.

você precisa adicionar CONFIG + = static ao seu arquivo .pro. Se isso não funcionar bem, você precisa fornecer mais algumas informações.