Create Statically Linkedin Binary Options




Create Statically Linkedin Binary OptionsLink bibliotecas apos arquivos objeto especialmente bibliotecas estaticas. Em versoes antigas e modernas do ambiente de link (I39m nao tenho certeza do status quo para versoes modestamente antigas a partir de novembro de 2010), listando a biblioteca estatica antes do arquivo code. c garante que os simbolos nele serao ignorados a menos que aconteca a Ser uma funcao main () em um dos arquivos objeto biblioteca. Ndash Jonathan Leffler Apr 20 14 as 21:09 jb por padrao, gcc links dinamicamente. Quando voce usa - lsomedynamiclib ele fica vinculado dinamicamente como esperado. Mas, quando gcc e dada uma biblioteca estatica explicitamente, ele sempre tentara vincula-lo estaticamente. Ha, no entanto, alguns detalhes complicados sobre a ordem em que os simbolos se resolvem nao sei bem como isso funciona. Eu aprendi que, quando em duvida, tente reorganizar a ordem das bandeiras de biblioteca :-) ndash bchurchill Ago 5 at 23:02 Da manpage de ld (isto nao funciona com gcc), referindo-se a opcao --static: Voce pode Use essa opcao varias vezes na linha de comando: ela afeta a biblioteca que procura as opcoes - l que a seguem. Uma solucao e colocar suas dependencias dinamicas antes da opcao --static na linha de comando. Outra possibilidade e nao usar --static. Mas, em vez disso, fornecer o nome de arquivo / caminho completo do arquivo de objeto estatico (isto e, nao usar a opcao - l) para vincular estaticamente uma biblioteca especifica. Exemplo: Como voce pode ver no exemplo, libX11 nao esta na lista de bibliotecas vinculadas dinamicamente, pois foi vinculada estaticamente. Cuidado: Um arquivo. so sempre esta vinculado dinamicamente, mesmo quando especificado com um nome de arquivo / caminho completo. Respondeu Nov 11 10 at 15:40 O problema como eu entendo e como segue. Voce tem varias bibliotecas, algumas estaticas, algumas dinamicas e outras estaticas e dinamicas. Gcc s comportamento padrao e a ligacao principalmente dinamico. Ou seja, gcc links para bibliotecas dinamicas quando possivel, mas de outra forma cai de volta para bibliotecas estaticas. Quando voce usa a opcao - static para o gcc, o comportamento e apenas ligar bibliotecas estaticas e sair com um erro se nenhuma biblioteca estatica puder ser encontrada, mesmo se houver uma biblioteca dinamica apropriada. Outra opcao, que eu tenho em varias ocasioes queria gcc tinha, e o que eu chamo de - mostalmente-estatico e e essencialmente o oposto de - dynamic (o padrao). - a maior parte - estatica, se existisse, preferiria ligar-se a bibliotecas estaticas, mas voltaria as bibliotecas dinamicas. Esta opcao nao existe, mas pode ser emulada com o seguinte algoritmo: Construindo a linha de comando de link com out incluindo - static. Iterar sobre as opcoes de ligacao dinamica. Acumule caminhos de biblioteca, ou seja, essas opcoes da forma - Ltlibdirgt em uma variavel ltlibpathgt Para cada opcao de vinculo dinamico, ou seja, aquelas da forma - lltlibnamegt. Execute o comando gcc ltlibpathgt - print-file-namelibltlibnamegt. a e capture a saida. Se o comando imprimir algo diferente do que voce passou, ele sera o caminho completo para a biblioteca estatica. Substitua a opcao de biblioteca dinamica pelo caminho completo para a biblioteca estatica. Enxague e repita ate que voce tenha processado toda a linha de comando do link. Opcionalmente, o script tambem pode ter uma lista de nomes de biblioteca para excluir da vinculacao estatica. O script bash a seguir parece fazer o truque: no meu sistema retorna: ou com uma exclusao: Qt Documentation Qt para Windows - Implantacao Esta documentacao descreve processo de implantacao para o Windows. Referimo-nos ao aplicativo de exemplo atraves do documento para demonstrar o processo de implantacao. A ferramenta de implantacao do Windows A ferramenta de implantacao do Windows foi projetada para automatizar o processo de criacao de uma pasta implementavel que contenha as dependencias (bibliotecas, importacoes QML, plug-ins e traducoes) necessarias para executar o aplicativo nessa pasta. Ele cria uma caixa de protecao para o Windows Runtime ou uma arvore de instalacao para aplicativos de desktop do Windows, que podem ser facilmente empacotados em um pacote de instalacao. A ferramenta pode ser encontrada em QTDIR / bin / windeployqt. Static Linking Para construir aplicativos estaticos, construa Qt estaticamente configurando o Qt com - static: Se mais tarde precisar reconfigurar e reconstruir o Qt a partir do mesmo local, certifique-se de que todos os tracos da configuracao anterior sejam removidos inserindo o diretorio de compilacao e executando o nmake distclean Ou mingw32-make distclean antes de executar configure novamente. Vinculando o Aplicativo a Versao Estatica do Qt Como exemplo, esta secao criara o exemplo Plug Paint amp statically. Assim que o Qt concluir a construcao, crie o aplicativo Plug amp Paint. Primeiro, temos de ir para o diretorio que contem o aplicativo: Executar qmake para criar um novo makefile para o aplicativo e executar uma compilacao limpa para criar o executavel vinculado estaticamente: Voce provavelmente deseja vincular as bibliotecas de release, e voce pode especificar isso Quando invocando qmake. Agora, desde que tudo compilado e vinculado sem erros, devemos ter um plugandpaint. exe arquivo que esta pronto para a implantacao. Para verificar se o aplicativo tem as bibliotecas necessarias, copie o executavel para uma maquina que nao tenha Qt ou quaisquer aplicativos Qt instalados e executa-lo nessa maquina. Lembre-se de que, se seu aplicativo depende de bibliotecas especificas do compilador, elas ainda precisam ser redistribuidas juntamente com o seu aplicativo. Voce pode verificar quais bibliotecas seu aplicativo esta vinculando usando a ferramenta depende. Para obter mais informacoes, leia a secao Dependencias do aplicativo. Como nao podemos implantar plugins usando a abordagem de vinculacao estatica, o aplicativo que preparamos e incompleto. Ele sera executado, mas a funcionalidade sera desativada devido aos plugins ausentes. Para implementar aplicativos baseados em plug-in, devemos usar a abordagem de biblioteca compartilhada. Bibliotecas compartilhadas Temos dois desafios ao implementar o aplicativo Plug amp Paint usando a abordagem de bibliotecas compartilhadas: O tempo de execucao Qt tem que ser redistribuido corretamente juntamente com o executavel do aplicativo e os plugins precisam ser instalados no local correto no sistema de destino para que O aplicativo pode encontra-los. Construindo o Qt como uma biblioteca compartilhada Para este exemplo, assumimos que o Qt esta instalado como uma biblioteca compartilhada, que e o padrao ao instalar o Qt, no diretorio C: pathtoQt. Vinculando o aplicativo ao Qt como uma biblioteca compartilhada Depois de garantir que o Qt e construido como uma biblioteca compartilhada, podemos criar o aplicativo Plug amp Paint. Primeiro, temos de ir para o diretorio que contem o aplicativo: Agora execute qmake para criar um novo makefile para o aplicativo, e fazer uma compilacao limpa para criar o executavel vinculado dinamicamente: Isso cria o aplicativo principal, o seguinte ira construir os plugins: Se tudo compilado e vinculado sem erros, obteremos um plugandpaint. exe executavel e os arquivos de plugin pnpbasictools. dll e pnpextrafilters. dll. Criando o Pacote de Aplicativos Para implementar o aplicativo, devemos nos certificar de que copiamos as DLLs Qt relevantes (correspondentes aos modulos Qt usados ??no aplicativo) e o plugin de plataforma do Windows, qwindows. dll. Bem como o executavel para a mesma arvore de diretorio no subdiretorio release. Em contraste com os plugins do usuario, os plugins do Qt devem ser colocados em subdiretorios que correspondam ao tipo de plugin. O local correto para o plugin de plataforma e um subdiretorio chamado plataformas. Qt Plugins secao tem informacoes adicionais sobre plugins e como Qt procura por eles. Qt depende da biblioteca ICU para suporte unicode. Voce deve incluir as DLLs do ICU que estao localizadas no diretorio bin da instalacao do Qt se o Qt estiver configurado para usar o ICU. A versao Qt incluida no pacote Qt5 usa ICU, portanto, a implantacao e necessaria. As DLLs do ICU sao dependentes da versao e tem de coincidir com as que a versao do Qt estava ligada. Se ANGLE (o padrao) for usado, voce adicionalmente precisa incluir ambos libEGL. dll e libGLESv2.dll do diretorio Qts lib, bem como o compilador HLSL do DirectX. A biblioteca do compilador HLSL, d3dcompilerXX. dll, onde XX e o numero de versao que ANGLE (libGLESv2) foi vinculado contra. Se o seu aplicativo depende do Qt WebEngine, voce deve implantar ltQt instalar pathgt / bin / QtWebEngineProcess. exe no caminho de instalacao do aplicativo. Se voce optar por implantar o binario em um caminho diferente, defina a variavel de ambiente QTWEBENGINEPROCESSPATH para o caminho absoluto de binarios (incluindo seu nome de arquivo). Isso permite que o aplicativo encontre o binario e o execute para cada instancia de QWebEngineView ou WebEngineView criada. Por exemplo, um aplicativo de navegador com duas abas abertas deve ter dois processos separados do QtWebEngineProcess. exe em execucao. Esta e uma abordagem comum usada pelos motores de web mais modernos para fornecer uma experiencia de navegacao estavel. Nota: Para suportar videos HTML5, voce deve implementar adicionalmente o ffmpegsumo. dll (plugin de codec WebM) no diretorio qtwebengine no caminho de instalacao do aplicativo ou sob o caminho que a variavel PluginsPath foi configurada para ltQt install pathgt / ltQt versiongt / msvc2013 / qt. conf. Lembre-se de que, se o aplicativo depender de bibliotecas especificas do compilador, elas devem ser redistribuidas juntamente com o aplicativo. Voce pode verificar quais bibliotecas seu aplicativo esta vinculando usando a ferramenta depende. Para obter mais informacoes, consulte a secao Dependencias do aplicativo. Bem, cubra os plugins em breve, mas primeiro verifique se o aplicativo funcionara em um ambiente implantado: Copie o executavel e as DLLs do Qt para uma maquina que nao tenha Qt ou quaisquer aplicativos Qt instalados ou se voce quiser testar na compilacao Maquina, certifique-se de que a maquina nao tem Qt em seu ambiente. Se o aplicativo e iniciado sem problemas, entao fizemos com exito uma versao ligada dinamicamente do aplicativo Plug amp Paint. Mas a funcionalidade dos aplicativos ainda estara em falta, uma vez que ainda nao implementamos os plug-ins associados. Os plugins funcionam de forma diferente das DLLs normais, portanto, nao podemos apenas copia-los para o mesmo diretorio que nossos aplicativos executaveis, como fizemos com as DLLs do Qt. Ao procurar plugins, o aplicativo procura em um subdiretorio de plugins dentro do diretorio do aplicativo executavel. Entao, para tornar os plugins disponiveis para o nosso aplicativo, temos que criar o subdiretorio de plugins e copiar sobre as DLLs relevantes: Um arquivo que distribui todas as DLLs do Qt e plugins especificos do aplicativo necessarios para executar o aplicativo Plug Paint amp, teria que incluir o seguinte : Para verificar se o aplicativo agora pode ser implementado com exito, voce pode extrair esse arquivo em uma maquina sem o Qt e sem qualquer compilador instalado e tentar executa-lo. Uma alternativa para colocar os plugins no subdiretorio plugins e adicionar um caminho de pesquisa personalizada quando voce inicia o aplicativo usando QApplication :: addLibraryPath () ou QApplication :: setLibraryPaths (). Um beneficio do uso de plugins e que eles podem ser facilmente disponibilizados para toda uma familia de aplicativos. Muitas vezes e mais conveniente adicionar o caminho na funcao main () do aplicativo, logo apos a criacao do objeto QApplication. Uma vez que o caminho e adicionado, o aplicativo ira procura-lo por plugins, alem de olhar no subdiretorio plugins no diretorio proprio de aplicativos. Qualquer numero de caminhos adicionais podem ser adicionados. Arquivos Manifest Ao implantar um aplicativo compilado com o Visual Studio 2005 em diante, existem algumas etapas adicionais a serem tomadas. Primeiro, precisamos copiar o arquivo de manifesto criado ao vincular o aplicativo. Este arquivo de manifesto contem informacoes sobre as dependencias de aplicativos em assemblies lado a lado, como as bibliotecas de tempo de execucao. O arquivo de manifesto precisa ser copiado para a mesma pasta que o aplicativo executavel. Voce nao precisa copiar os arquivos de manifesto para bibliotecas compartilhadas (DLLs), uma vez que eles nao sao usados. Se a biblioteca compartilhada tiver dependencias que sao diferentes do aplicativo usando-o, o arquivo de manifesto precisa ser incorporado no binario DLL. Desde Qt 4.1x2e3, as seguintes opcoes CONFIG estao disponiveis para incorporar manifestos: Ambas as opcoes sao habilitadas por padrao. Para remover embedmanifestexe. Adicione ao seu arquivo. pro. Voce pode encontrar mais informacoes sobre arquivos de manifesto e assemblies side-by-side no site da MSDN. A maneira correta de incluir as bibliotecas de tempo de execucao com seu aplicativo e garantir que eles estejam instalados no sistema de usuarios finais. Para instalar as bibliotecas de tempo de execucao no sistema de usuarios finais, voce precisa incluir o executavel apropriado Visual C Redistributable Package (VCRedist) com seu aplicativo e garantir que ele seja executado quando o usuario instala o aplicativo. Por exemplo, em um sistema baseado em x86 de 32 bits, voce incluiria o executavel vcredistx86.exe. Os executaveis ??vcredistIA64.exe e vcredistx64.exe fornecem as bibliotecas apropriadas para as arquiteturas IA64 e 64-bit x86, respectivamente. Nota: O aplicativo enviado deve ser compilado com exatamente a mesma versao do compilador contra a mesma versao do tempo de execucao C. Isso impede a implantacao de erros causados ??por diferentes versoes das bibliotecas de tempo de execucao C. Instalacoes manuais com o Visual Studio 2008 e 2010 Alem dos detalhes acima para o VS 2005 e para diante, os aplicativos do Visual Studio 2008/2010 podem ter problemas ao implementar manualmente, digamos, para um stick USB. O procedimento recomendado e configurar o Qt com a opcao - plugin-manifests usando a ferramenta configure. Em seguida, siga as diretrizes para implantacao manual de assemblies particulares. Em breve, as etapas sao criar uma estrutura de pastas no computador de desenvolvimento que ira corresponder a estrutura de diretorios de destino USB stick, por exemplo, app e para o seu dlls, applib. No computador de desenvolvimento, a partir da copia redist pasta apropriada sobre Microsoft. VC80.CRT e Microsoft. VC80.MFC para o aplicativo de diretorios e applib no PC de desenvolvimento. Xcopie a pasta do aplicativo para o stick USB de destino. Seu aplicativo agora deve ser executado. Alem disso, esteja ciente de que mesmo com um service pack instalado as DLLs do Windows que estao vinculadas a serao os padroes. Consulte as informacoes sobre como selecionar as DLLs de destino apropriadas. Dependencias do aplicativo Bibliotecas adicionais Dependendo da configuracao, as bibliotecas especificas do compilador devem ser redistribuidas juntamente com o aplicativo. Por exemplo, se Qt e construido usando ANGLE. Suas bibliotecas compartilhadas e as bibliotecas compartilhadas necessarias do SDK do Direct X precisam ser enviadas tambem. Voce pode verificar quais bibliotecas seu aplicativo esta vinculando usando a ferramenta Dependency Walker. Tudo o que voce precisa fazer e executa-lo como este: Isso fornecera uma lista das bibliotecas de que o aplicativo depende e outras informacoes. Ao examinar a versao do plug-in Plug Paint Paint (plugandpaint. exe) com a ferramenta depends, a ferramenta lista as seguintes dependencias imediatas para bibliotecas que nao sao do sistema: Ao examinar as DLLs do plugin, as mesmas dependencias sao listadas. A partir da versao 5.2 do Qt, a versao oficialmente suportada para OpenSSL e 1.0x2e0 ou posterior. As versoes gt 0.9x2e7 e lt 1.0x2e0 podem funcionar, mas nao sao garantidas. Plugins Qt Todos os aplicativos Qt GUI requerem um plugin que implementa a camada Qt Platform Abstraction (QPA) no Qt 5. Para Windows, o nome do plugin de plataforma e qwindows. dll. Esse arquivo deve estar localizado em um subdiretorio especifico (por padrao, plataformas) em seu diretorio de distribuicao. Alternativamente, e possivel ajustar o caminho de busca que o Qt usa para encontrar seus plugins, conforme descrito abaixo. Seu aplicativo tambem pode depender de um ou mais plugins Qt, como o plugin de suporte de impressao, o plug-in de formato de imagem JPEG ou um plug-in de driver SQL. Certifique-se de distribuir todos os plugins Qt que voce precisa com seu aplicativo. Semelhante ao plugin de plataforma, cada tipo de plugin deve estar localizado dentro de um subdiretorio especifico (como printsupport. Imageformats ou sqldrivers) dentro de seu diretorio de distribuicao. O caminho de busca para os plug-ins do Qt e codificado na biblioteca do QtCore. Por padrao, o subdiretorio plugins da instalacao do Qt e o primeiro caminho de pesquisa do plugin. No entanto, caminhos pre-determinados como o padrao tem certas desvantagens. Por exemplo, eles podem nao existir na maquina de destino. Por essa razao, voce precisa examinar varias alternativas para se certificar de que os plugins Qt sao encontrados: Usando qt. conf. Essa abordagem e recomendada se voce tiver executaveis ??em locais diferentes que compartilham os mesmos plug-ins. Usando QApplication :: addLibraryPath () ou QApplication :: setLibraryPaths (). Essa abordagem e recomendada se voce tiver apenas um executavel que usara o plug-in. Usando um utilitario de instalacao de terceiros para alterar os caminhos codificados na biblioteca QtCore. Se voce adicionar um caminho personalizado usando QApplication :: addLibraryPath ele poderia ficar assim: Entao qApp - gtlibraryPaths () retornaria algo como isto: C: / customPath / plugins C: / Qt / VERSION / plugins E: / myApplication / Executavel ira procurar os plugins nesses diretorios ea mesma ordem que o QStringList retornado por qApp - gtlibraryPaths (). O caminho recem-adicionado e pre-anexado ao qApp - gtlibraryPaths (), o que significa que ele sera pesquisado primeiro. No entanto, se voce usar qApp - gtsetLibraryPaths (), voce sera capaz de determinar quais caminhos e em que ordem eles serao pesquisados. O documento How to Create Qt Plugins descreve os problemas que voce precisa prestar atencao ao criar e implementar plug-ins para aplicativos Qt. Copy 2016 The Qt Company Ltd. As contribuicoes da documentacao aqui incluidas sao de direitos autorais de seus respectivos proprietarios. A documentacao aqui fornecida e licenciada sob os termos da Licenca de Documentacao Livre GNU versao 1.3, publicada pela Free Software Foundation. Qt e respectivos logotipos sao marcas registradas da The Qt Company Ltd. na Finlandia e / ou em outros paises do mundo. Todas as outras marcas registradas sao propriedade de seus respectivos proprietarios. Conteudo Objetivo deste documento Escrever uma biblioteca Vamos escrever um codigo simples para a biblioteca AddNumbers que permitem armazenar e adicionar dois inteiros. E composto de arquivos de interface e de origem. Criar uma biblioteca estatica Primeiro, o arquivo de origem src / AddNumbers. cpp e convertido em um arquivo de objeto. Uma biblioteca estatica e basicamente um conjunto de arquivos objeto que foram copiados em um unico arquivo. Ele e criado invocando o arquivo ar. O nome da biblioteca deve comecar com as tres letras lib e ter o sufixo. a. Voce tambem pode escrever regras semelhantes em um makefile. Veja o arquivo Makefile. static dado no arquivo AddNumbers. tar. bz2. Criar uma biblioteca compartilhada A opcao - fpic diz ao g para criar um codigo independente de posicao que e necessario para bibliotecas compartilhadas. Finalmente, a biblioteca compartilhada e criada. Observe que o nome da biblioteca deve comecar com as tres letras lib e ter o sufixo. so. Como um exemplo makefile veja o arquivo Makefile. shared dado no arquivo AddNumbers. tar. bz2. Simbolos C Os comandos nm e cfilt permitem listar e desmembrar simbolos C a partir de arquivos de objeto. Vamos tentar esses comandos com a biblioteca estatica libAddNumbers. a. Isso significa que a biblioteca libAddNumbers. a foi criada com o arquivo de objeto AddNumbers. o que contem alguns simbolos. A primeira coluna e o valor do simbolo (representa a posicao do simbolo na biblioteca). A segunda coluna e o tipo de simbolo. E a terceira coluna e o nome do simbolo. Consulte a tabela a seguir que descreve alguns tipos de simbolos comuns. O simbolo e um simbolo fraco que nao foi especificamente marcado como um simbolo de objeto fraco. Quando um simbolo fraco definido e ligado com um simbolo definido normal, o simbolo definido normal e usado sem erro. Quando um simbolo indefinido fraco esta ligado e o simbolo nao esta definido, o valor do simbolo e determinado de uma forma especifica do sistema sem erro. Maiusculas indica que um valor padrao foi especificado. O tipo de simbolo e desconhecido. Ou formato de arquivo de objeto especifico. Consulte o manual nm para mais detalhes. Os simbolos nao sao humanos compreensiveis. E com o fato de linguagem C fornece sobrecarga de funcao, o que significa que voce pode escrever muitas funcoes com o mesmo nome (desde que cada um leva parametros de diferentes tipos). Todos os nomes de funcao C sao codificados em um rotulo de montagem de baixo nivel (este processo e conhecido como mangling). O programa cfilt faz o mapeamento inverso: ele decodifica (processo de demagamento) nomes de baixo nivel em nomes de nivel de usuario. O programa nm permite desmembrar diretamente simbolos usando a opcao - C. Usando bibliotecas Esta secao descreve como usar bibliotecas estaticas ou compartilhadas em programas. Primeiro, precisamos criar um programa principal. Para vincular esse programa com a biblioteca estatica, escreva o seguinte comando que compila e vincula o executavel principal. Observe que as tres primeiras letras lib, bem como o sufixo. a nao sao especificados para o nome da biblioteca. Agora o programa AddNumbersClientstatic pode ser executado. Para associar a biblioteca compartilhada, digite o seguinte comando. As primeiras tres letras lib, bem como o sufixo. so nao sao especificados para o nome da biblioteca. Para executar o programa AddNumbersClientshared, voce precisa informar a variavel de ambiente LDLIBRARYPATH onde encontrou a biblioteca compartilhada. No mundo real e melhor usar um caminho absoluto para LDLIBRARYPATH. Como makefile exemplos ver Makefile. static e Makefile. shared arquivos fornecidos no arquivo AddNumbersClient. tar. bz2. Lista de bibliotecas compartilhadas O comando ldd imprime as bibliotecas compartilhadas requeridas por cada programa ou biblioteca compartilhada especificada na linha de comando. Opcoes uteis de ar O programa GNU ar cria, modifica e extrai arquivos. Um arquivo e um unico arquivo que contem uma colecao de outros arquivos em uma estrutura que torna possivel recuperar os arquivos individuais originais (chamados de membros do arquivo). O filescontents original, modo (permissoes), timestamp, proprietario e grupo sao preservados no arquivo e podem ser restaurados na extracao. Opcoes uteis de nm Links uteisI instalou um aplicativo, p. Fdisk. Mas exigia bibliotecas para execucao. Estou procurando utilitario / ferramenta que me ajudara a criar um binario estatico de binarios ja instalados. Para que eu possa usa-lo em qualquer lugar. As unicas ferramentas confiaveis ??que eu encontrei e ErmineLight a partir daqui. Mas este e compartilhar-ware. Existe algum software de codigo aberto esta disponivel para o mesmo EDIT fdisk e apenas um exemplo. Eu na maioria das vezes trabalho em LFS, Entao, se eu tenho que usar qualquer utilitario, eu preciso seguir os passos como Entao so para salvar o tempo, estou procurando uma solucao na qual vou fazer um binario estatico do debian ou De fedora ou de outro distrbution, tenta-lo em LFS, e se trabalha muito bem ou como por minha exigencia, eu irei com codigo-fonte para a compilacao. Perguntou May 2 11 at 18:38 Bem. Isso parece uma ideia muito ruim. Mas, e possivel. Como fdisk e open source, basta pegar sua fonte, e olhar para o Makefile. Voce deve encontrar uma opcao que passara - static para gcc na compilacao. Eu nao sou um guru de C / C, mas ate onde eu sei criando um binario estaticamente vinculado a partir de um binario dinamico existente nao e possivel. Se voce quiser usa-lo em qualquer lugar, eu recomendo usar uma pequena distribuicao de manutencao que comeca em segundos e permite que voce modifique tudo. Faz mais sentido para mim, porque voce provavelmente vai querer modificar o disco executando a sua instalacao Linux / UNIX. O link funciona para mim. A pagina tem o numero de erros ortograficos / editoriais que voce poderia esperar do trabalho de um programador profissional mais do que voce esperaria de um site profissional, menos do que voce esperaria de um e-mail de phishing. Sobre o mesmo que o post acima, venha a pensar nisso. Parece suspeito que este novo usuario iria se juntar Stack Exchange apenas a tempo de postar um link para o que parece ser um novo site. Ndash G-Man Aug 27 15 at 22: 58I ter construido QT 5.0.1 estaticamente no VS 2010 no Windows 7 x64. Os parametros de configuracao foram configurados - debug-and-release - opensource - confirm-license - platform win32-msvc2010 - exemplos de nomake - nomake testes - no-webkit - static e executei a compilacao com o jom com os seguintes parametros: O processo de compilacao foi bem-sucedido E eu posso encontrar todas as libs e link meu aplicativo com QT estaticamente. Agora o problema e que quando eu tento executar o aplicativo, ele me da um erro Falha ao carregar janelas do plugin da plataforma. Plataformas disponiveis sao: Mas abaixo deste erro, ele nao aparece nenhuma plataforma. Eu encontrei o mesmo erro ao ligar dinamicamente QT. Eu me livrei disso colocando DLLs de dependencia (qt5core. dll, qt5gui. dll etc) no mesmo diretorio do meu exe. Mas eu nao consigo descobrir um caminho dessa vez. Apos a compilacao estatica do QT, as DLLs nos plugins / plataformas / pasta desapareceram e sao substituidas por libs. Eu tambem tentei link estaticamente com qwindows. lib, mas sem sucesso. Qualquer ideia Cumprimentos. Para verificar quais DLL sao necessarios para implantar seu aplicativo no Windows, use dependencia Walker (www. dependencywalker /). De acordo com a pagina de documentacao Qt para Windows - Deployment algumas DLL sao necessarias para implantar um aplicativo Qt em plataformas Windows: Dependendo do compilador que voce usa para compilar o aplicativo, algumas outras bibliotecas podem ser necessarias: MSVC bibliotecas especificas: msvcrXX. dll msvcpXX. Dll Bibliotecas especificas MinGW libgccsdw2-1.DLL libstdc-6.dll Observacao: em todos esses arquivos, substitua XX pela versao atual da DLL em seu sistema. Se voce didnt construir Qt estaticamente (padrao), voce tambem precisara Qt5 DLL dependendo do modulo Qt que voce usa em seu aplicativo. Exemplo: Todas essas DLL podem ser encontradas na pasta bin, em seu diretorio de instalacao do Qt. EDIT Recentemente, desenvolvedores Qt criou uma ferramenta chamada windeployqt. exe que ajuda voce a reunir todas as bibliotecas necessarias para implantar um aplicativo: