Wednesday 21 February 2018

Create statically linkedin binary options


Link bibliotecas após arquivos objeto especialmente bibliotecas estáticas. Em versões antigas e modernas do ambiente de link (I39m não tenho certeza do status quo para versões modestamente antigas a partir de novembro de 2018), listando a biblioteca estática antes do arquivo code. c garante que os símbolos nele serão ignorados a menos que aconteça a Ser uma função main () em um dos arquivos objeto biblioteca. Ndash Jonathan Leffler Apr 20 14 às 21:09 jb por padrão, gcc links dinamicamente. Quando você usa - lsomedynamiclib ele fica vinculado dinamicamente como esperado. Mas, quando gcc é dada uma biblioteca estática explicitamente, ele sempre tentará vinculá-lo estaticamente. Há, no entanto, alguns detalhes complicados sobre a ordem em que os símbolos se resolvem não sei bem como isso funciona. Eu aprendi que, quando em dúvida, tente reorganizar a ordem das bandeiras de biblioteca :-) ndash bchurchill Ago 5 at 23:02 Da manpage de ld (isto não funciona com gcc), referindo-se à opção --static: Você pode Use essa opção várias vezes na linha de comando: ela afeta a biblioteca que procura as opções - l que a seguem. Uma solução é colocar suas dependências dinâmicas antes da opção --static na linha de comando. Outra possibilidade é não usar --static. Mas, em vez disso, fornecer o nome de arquivo / caminho completo do arquivo de objeto estático (isto é, não usar a opção - l) para vincular estaticamente uma biblioteca específica. Exemplo: Como você pode ver no exemplo, libX11 não está na lista de bibliotecas vinculadas dinamicamente, pois foi vinculada estaticamente. Cuidado: Um arquivo. so sempre está vinculado dinamicamente, mesmo quando especificado com um nome de arquivo / caminho completo. Respondeu Nov 11 10 at 15:40 O problema como eu entendo é como segue. Você tem várias bibliotecas, algumas estáticas, algumas dinâmicas e outras estáticas e dinâmicas. Gcc s comportamento padrão é a ligação principalmente dinâmico. Ou seja, gcc links para bibliotecas dinâmicas quando possível, mas de outra forma cai de volta para bibliotecas estáticas. Quando você usa a opção - static para o gcc, o comportamento é apenas ligar bibliotecas estáticas e sair com um erro se nenhuma biblioteca estática puder ser encontrada, mesmo se houver uma biblioteca dinâmica apropriada. Outra opção, que eu tenho em várias ocasiões queria gcc tinha, é o que eu chamo de - mostalmente-estático e é essencialmente o oposto de - dynamic (o padrão). - a maior parte - estática, se existisse, preferiria ligar-se a bibliotecas estáticas, mas voltaria às bibliotecas dinâmicas. Esta opção não existe, mas pode ser emulada com o seguinte algoritmo: Construindo a linha de comando de link com out incluindo - static. Iterar sobre as opções de ligação dinâmica. Acumule caminhos de biblioteca, ou seja, essas opções da forma - Ltlibdirgt em uma variável ltlibpathgt Para cada opção de vínculo dinâmico, ou seja, aquelas da forma - lltlibnamegt. Execute o comando gcc ltlibpathgt - print-file-namelibltlibnamegt. a e capture a saída. Se o comando imprimir algo diferente do que você passou, ele será o caminho completo para a biblioteca estática. Substitua a opção de biblioteca dinâmica pelo caminho completo para a biblioteca estática. Enxágüe e repita até que você tenha processado toda a linha de comando do link. Opcionalmente, o script também pode ter uma lista de nomes de biblioteca para excluir da vinculação estática. O script bash a seguir parece fazer o truque: no meu sistema retorna: ou com uma exclusão: Qt Documentation Qt para Windows - Implantação Esta documentação descreve processo de implantação para o Windows. Referimo-nos ao aplicativo de exemplo através do documento para demonstrar o processo de implantação. A ferramenta de implantação do Windows A ferramenta de implantação do Windows foi projetada para automatizar o processo de criação de uma pasta implementável que contenha as dependências (bibliotecas, importações QML, plug-ins e traduções) necessárias para executar o aplicativo nessa pasta. Ele cria uma caixa de proteção para o Windows Runtime ou uma árvore de instalação para aplicativos de desktop do Windows, que podem ser facilmente empacotados em um pacote de instalação. A ferramenta pode ser encontrada em QTDIR / bin / windeployqt. Static Linking Para construir aplicativos estáticos, 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 traços da configuração anterior sejam removidos inserindo o diretório de compilação e executando o nmake distclean Ou mingw32-make distclean antes de executar configure novamente. Vinculando o Aplicativo à Versão Estática do Qt Como exemplo, esta seção criará o exemplo Plug Paint amp statically. Assim que o Qt concluir a construção, crie o aplicativo Plug amp Paint. Primeiro, temos de ir para o diretório que contém o aplicativo: Executar qmake para criar um novo makefile para o aplicativo e executar uma compilação limpa para criar o executável vinculado estaticamente: Você provavelmente deseja vincular as bibliotecas de release, e você pode especificar isso Quando invocando qmake. Agora, desde que tudo compilado e vinculado sem erros, devemos ter um plugandpaint. exe arquivo que está pronto para a implantação. Para verificar se o aplicativo tem as bibliotecas necessárias, copie o executável para uma máquina que não tenha Qt ou quaisquer aplicativos Qt instalados e executá-lo nessa máquina. Lembre-se de que, se seu aplicativo depende de bibliotecas específicas do compilador, elas ainda precisam ser redistribuídas juntamente com o seu aplicativo. Você pode verificar quais bibliotecas seu aplicativo está vinculando usando a ferramenta depende. Para obter mais informações, leia a seção Dependências do aplicativo. Como não podemos implantar plugins usando a abordagem de vinculação estática, o aplicativo que preparamos é incompleto. Ele será executado, mas a funcionalidade será 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 execução Qt tem que ser redistribuído corretamente juntamente com o executável do aplicativo e os plugins precisam ser instalados no local correto no sistema de destino para que O aplicativo pode encontrá-los. Construindo o Qt como uma biblioteca compartilhada Para este exemplo, assumimos que o Qt está instalado como uma biblioteca compartilhada, que é o padrão ao instalar o Qt, no diretório C: pathtoQt. Vinculando o aplicativo ao Qt como uma biblioteca compartilhada Depois de garantir que o Qt é construído como uma biblioteca compartilhada, podemos criar o aplicativo Plug amp Paint. Primeiro, temos de ir para o diretório que contém o aplicativo: Agora execute qmake para criar um novo makefile para o aplicativo, e fazer uma compilação limpa para criar o executável vinculado dinamicamente: Isso cria o aplicativo principal, o seguinte irá construir os plugins: Se tudo compilado e vinculado sem erros, obteremos um plugandpaint. exe executável 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 módulos Qt usados ​​no aplicativo) e o plugin de plataforma do Windows, qwindows. dll. Bem como o executável para a mesma árvore de diretório no subdiretório release. Em contraste com os plugins do usuário, os plugins do Qt devem ser colocados em subdiretórios que correspondam ao tipo de plugin. O local correto para o plugin de plataforma é um subdiretório chamado plataformas. Qt Plugins seção tem informações adicionais sobre plugins e como Qt procura por eles. Qt depende da biblioteca ICU para suporte unicode. Você deve incluir as DLLs do ICU que estão localizadas no diretório bin da instalação do Qt se o Qt estiver configurado para usar o ICU. A versão Qt incluída no pacote Qt5 usa ICU, portanto, a implantação é necessária. As DLLs do ICU são dependentes da versão e têm de coincidir com as que a versão do Qt estava ligada. Se ANGLE (o padrão) for usado, você adicionalmente precisa incluir ambos libEGL. dll e libGLESv2.dll do diretório Qts lib, bem como o compilador HLSL do DirectX. A biblioteca do compilador HLSL, d3dcompilerXX. dll, onde XX é o número de versão que ANGLE (libGLESv2) foi vinculado contra. Se o seu aplicativo depende do Qt WebEngine, você deve implantar ltQt instalar pathgt / bin / QtWebEngineProcess. exe no caminho de instalação do aplicativo. Se você optar por implantar o binário em um caminho diferente, defina a variável de ambiente QTWEBENGINEPROCESSPATH para o caminho absoluto de binários (incluindo seu nome de arquivo). Isso permite que o aplicativo encontre o binário e o execute para cada instância de QWebEngineView ou WebEngineView criada. Por exemplo, um aplicativo de navegador com duas abas abertas deve ter dois processos separados do QtWebEngineProcess. exe em execução. Esta é uma abordagem comum usada pelos motores de web mais modernos para fornecer uma experiência de navegação estável. Nota: Para suportar vídeos HTML5, você deve implementar adicionalmente o ffmpegsumo. dll (plugin de codec WebM) no diretório qtwebengine no caminho de instalação do aplicativo ou sob o caminho que a variável PluginsPath foi configurada para ltQt install pathgt / ltQt versiongt / msvc2017 / qt. conf. Lembre-se de que, se o aplicativo depender de bibliotecas específicas do compilador, elas devem ser redistribuídas juntamente com o aplicativo. Você pode verificar quais bibliotecas seu aplicativo está vinculando usando a ferramenta depende. Para obter mais informações, consulte a seção Dependências do aplicativo. Bem, cubra os plugins em breve, mas primeiro verifique se o aplicativo funcionará em um ambiente implantado: Copie o executável e as DLLs do Qt para uma máquina que não tenha Qt ou quaisquer aplicativos Qt instalados ou se você quiser testar na compilação Máquina, certifique-se de que a máquina não tem Qt em seu ambiente. Se o aplicativo é iniciado sem problemas, então fizemos com êxito uma versão ligada dinamicamente do aplicativo Plug amp Paint. Mas a funcionalidade dos aplicativos ainda estará em falta, uma vez que ainda não implementamos os plug-ins associados. Os plugins funcionam de forma diferente das DLLs normais, portanto, não podemos apenas copiá-los para o mesmo diretório que nossos aplicativos executáveis, como fizemos com as DLLs do Qt. Ao procurar plugins, o aplicativo procura em um subdiretório de plugins dentro do diretório do aplicativo executável. Então, para tornar os plugins disponíveis para o nosso aplicativo, temos que criar o subdiretório de plugins e copiar sobre as DLLs relevantes: Um arquivo que distribui todas as DLLs do Qt e plugins específicos do aplicativo necessários para executar o aplicativo Plug Paint amp, teria que incluir o seguinte : Para verificar se o aplicativo agora pode ser implementado com êxito, você pode extrair esse arquivo em uma máquina sem o Qt e sem qualquer compilador instalado e tentar executá-lo. Uma alternativa para colocar os plugins no subdiretório plugins é adicionar um caminho de pesquisa personalizada quando você inicia o aplicativo usando QApplication :: addLibraryPath () ou QApplication :: setLibraryPaths (). Um benefício do uso de plugins é que eles podem ser facilmente disponibilizados para toda uma família de aplicativos. Muitas vezes é mais conveniente adicionar o caminho na função main () do aplicativo, logo após a criação do objeto QApplication. Uma vez que o caminho é adicionado, o aplicativo irá procurá-lo por plugins, além de olhar no subdiretório plugins no diretório próprio de aplicativos. Qualquer número 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 contém informações sobre as dependências de aplicativos em assemblies lado a lado, como as bibliotecas de tempo de execução. O arquivo de manifesto precisa ser copiado para a mesma pasta que o aplicativo executável. Você não precisa copiar os arquivos de manifesto para bibliotecas compartilhadas (DLLs), uma vez que eles não são usados. Se a biblioteca compartilhada tiver dependências que são diferentes do aplicativo usando-o, o arquivo de manifesto precisa ser incorporado no binário DLL. Desde Qt 4.1x2e3, as seguintes opções CONFIG estão disponíveis para incorporar manifestos: Ambas as opções são habilitadas por padrão. Para remover embedmanifestexe. Adicione ao seu arquivo. pro. Você pode encontrar mais informações sobre arquivos de manifesto e assemblies side-by-side no site da MSDN. A maneira correta de incluir as bibliotecas de tempo de execução com seu aplicativo é garantir que eles estejam instalados no sistema de usuários finais. Para instalar as bibliotecas de tempo de execução no sistema de usuários finais, você precisa incluir o executável apropriado Visual C Redistributable Package (VCRedist) com seu aplicativo e garantir que ele seja executado quando o usuário instala o aplicativo. Por exemplo, em um sistema baseado em x86 de 32 bits, você incluiria o executável vcredistx86.exe. Os executáveis ​​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 versão do compilador contra a mesma versão do tempo de execução C. Isso impede a implantação de erros causados ​​por diferentes versões das bibliotecas de tempo de execução C. Instalações manuais com o Visual Studio 2008 e 2018 Além dos detalhes acima para o VS 2005 e para diante, os aplicativos do Visual Studio 2008/2018 podem ter problemas ao implementar manualmente, digamos, para um stick USB. O procedimento recomendado é configurar o Qt com a opção - plugin-manifests usando a ferramenta configure. Em seguida, siga as diretrizes para implantação manual de assemblies particulares. Em breve, as etapas são criar uma estrutura de pastas no computador de desenvolvimento que irá corresponder a estrutura de diretórios de destino USB stick, por exemplo, app e para o seu dlls, applib. No computador de desenvolvimento, a partir da cópia redist pasta apropriada sobre Microsoft. VC80.CRT e Microsoft. VC80.MFC para o aplicativo de diretórios e applib no PC de desenvolvimento. Xcopie a pasta do aplicativo para o stick USB de destino. Seu aplicativo agora deve ser executado. Além disso, esteja ciente de que mesmo com um service pack instalado as DLLs do Windows que estão vinculadas a serão os padrões. Consulte as informações sobre como selecionar as DLLs de destino apropriadas. Dependências do aplicativo Bibliotecas adicionais Dependendo da configuração, as bibliotecas específicas do compilador devem ser redistribuídas juntamente com o aplicativo. Por exemplo, se Qt é construído usando ANGLE. Suas bibliotecas compartilhadas e as bibliotecas compartilhadas necessárias do SDK do Direct X precisam ser enviadas também. Você pode verificar quais bibliotecas seu aplicativo está vinculando usando a ferramenta Dependency Walker. Tudo o que você precisa fazer é executá-lo como este: Isso fornecerá uma lista das bibliotecas de que o aplicativo depende e outras informações. Ao examinar a versão do plug-in Plug Paint Paint (plugandpaint. exe) com a ferramenta depends, a ferramenta lista as seguintes dependências imediatas para bibliotecas que não são do sistema: Ao examinar as DLLs do plugin, as mesmas dependências são listadas. A partir da versão 5.2 do Qt, a versão oficialmente suportada para OpenSSL é 1.0x2e0 ou posterior. As versões gt 0.9x2e7 e lt 1.0x2e0 podem funcionar, mas não são 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 é qwindows. dll. Esse arquivo deve estar localizado em um subdiretório específico (por padrão, plataformas) em seu diretório de distribuição. Alternativamente, é possível ajustar o caminho de busca que o Qt usa para encontrar seus plugins, conforme descrito abaixo. Seu aplicativo também pode depender de um ou mais plugins Qt, como o plugin de suporte de impressão, o plug-in de formato de imagem JPEG ou um plug-in de driver SQL. Certifique-se de distribuir todos os plugins Qt que você precisa com seu aplicativo. Semelhante ao plugin de plataforma, cada tipo de plugin deve estar localizado dentro de um subdiretório específico (como printsupport. Imageformats ou sqldrivers) dentro de seu diretório de distribuição. O caminho de busca para os plug-ins do Qt é codificado na biblioteca do QtCore. Por padrão, o subdiretório plugins da instalação do Qt é o primeiro caminho de pesquisa do plugin. No entanto, caminhos pré-determinados como o padrão têm certas desvantagens. Por exemplo, eles podem não existir na máquina de destino. Por essa razão, você precisa examinar várias alternativas para se certificar de que os plugins Qt são encontrados: Usando qt. conf. Essa abordagem é recomendada se você tiver executáveis ​​em locais diferentes que compartilham os mesmos plug-ins. Usando QApplication :: addLibraryPath () ou QApplication :: setLibraryPaths (). Essa abordagem é recomendada se você tiver apenas um executável que usará o plug-in. Usando um utilitário de instalação de terceiros para alterar os caminhos codificados na biblioteca QtCore. Se você adicionar um caminho personalizado usando QApplication :: addLibraryPath ele poderia ficar assim: Então qApp - gtlibraryPaths () retornaria algo como isto: C: / customPath / plugins C: / Qt / VERSION / plugins E: / myApplication / Executável irá procurar os plugins nesses diretórios ea mesma ordem que o QStringList retornado por qApp - gtlibraryPaths (). O caminho recém-adicionado é pré-anexado ao qApp - gtlibraryPaths (), o que significa que ele será pesquisado primeiro. No entanto, se você usar qApp - gtsetLibraryPaths (), você será capaz de determinar quais caminhos e em que ordem eles serão pesquisados. O documento How to Create Qt Plugins descreve os problemas que você precisa prestar atenção ao criar e implementar plug-ins para aplicativos Qt. Copy 2017 The Qt Company Ltd. As contribuições da documentação aqui incluídas são de direitos autorais de seus respectivos proprietários. A documentação aqui fornecida é licenciada sob os termos da Licença de Documentação Livre GNU versão 1.3, publicada pela Free Software Foundation. Qt e respectivos logotipos são marcas registradas da The Qt Company Ltd. na Finlândia e / ou em outros países do mundo. Todas as outras marcas registradas são propriedade de seus respectivos proprietários. Conteúdo Objetivo deste documento Escrever uma biblioteca Vamos escrever um código simples para a biblioteca AddNumbers que permitem armazenar e adicionar dois inteiros. É composto de arquivos de interface e de origem. Criar uma biblioteca estática Primeiro, o arquivo de origem src / AddNumbers. cpp é convertido em um arquivo de objeto. Uma biblioteca estática é basicamente um conjunto de arquivos objeto que foram copiados em um único arquivo. Ele é criado invocando o arquivo ar. O nome da biblioteca deve começar com as três letras lib e ter o sufixo. a. Você também pode escrever regras semelhantes em um makefile. Veja o arquivo Makefile. static dado no arquivo AddNumbers. tar. bz2. Criar uma biblioteca compartilhada A opção - fpic diz ao g para criar um código independente de posição que é necessário para bibliotecas compartilhadas. Finalmente, a biblioteca compartilhada é criada. Observe que o nome da biblioteca deve começar com as três letras lib e ter o sufixo. so. Como um exemplo makefile veja o arquivo Makefile. shared dado no arquivo AddNumbers. tar. bz2. Símbolos C Os comandos nm e cfilt permitem listar e desmembrar símbolos C a partir de arquivos de objeto. Vamos tentar esses comandos com a biblioteca estática libAddNumbers. a. Isso significa que a biblioteca libAddNumbers. a foi criada com o arquivo de objeto AddNumbers. o que contém alguns símbolos. A primeira coluna é o valor do símbolo (representa a posição do símbolo na biblioteca). A segunda coluna é o tipo de símbolo. E a terceira coluna é o nome do símbolo. Consulte a tabela a seguir que descreve alguns tipos de símbolos comuns. O símbolo é um símbolo fraco que não foi especificamente marcado como um símbolo de objeto fraco. Quando um símbolo fraco definido é ligado com um símbolo definido normal, o símbolo definido normal é usado sem erro. Quando um símbolo indefinido fraco está ligado e o símbolo não está definido, o valor do símbolo é determinado de uma forma específica do sistema sem erro. Maiúsculas indica que um valor padrão foi especificado. O tipo de símbolo é desconhecido. Ou formato de arquivo de objeto específico. Consulte o manual nm para mais detalhes. Os símbolos não são humanos compreensíveis. É com o fato de linguagem C fornece sobrecarga de função, o que significa que você pode escrever muitas funções com o mesmo nome (desde que cada um leva parâmetros de diferentes tipos). Todos os nomes de função C são codificados em um rótulo de montagem de baixo nível (este processo é conhecido como mangling). O programa cfilt faz o mapeamento inverso: ele decodifica (processo de demagamento) nomes de baixo nível em nomes de nível de usuário. O programa nm permite desmembrar diretamente símbolos usando a opção - C. Usando bibliotecas Esta seção descreve como usar bibliotecas estáticas ou compartilhadas em programas. Primeiro, precisamos criar um programa principal. Para vincular esse programa com a biblioteca estática, escreva o seguinte comando que compila e vincula o executável principal. Observe que as três primeiras letras lib, bem como o sufixo. a não são especificados para o nome da biblioteca. Agora o programa AddNumbersClientstatic pode ser executado. Para associar a biblioteca compartilhada, digite o seguinte comando. As primeiras três letras lib, bem como o sufixo. so não são especificados para o nome da biblioteca. Para executar o programa AddNumbersClientshared, você precisa informar à variável de ambiente LDLIBRARYPATH onde encontrou a biblioteca compartilhada. No mundo real é 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. Opções úteis de ar O programa GNU ar cria, modifica e extrai arquivos. Um arquivo é um único arquivo que contém uma coleção de outros arquivos em uma estrutura que torna possível recuperar os arquivos individuais originais (chamados de membros do arquivo). O filescontents original, modo (permissões), timestamp, proprietário e grupo são preservados no arquivo e podem ser restaurados na extração. Opções úteis de nm Links úteisI instalou um aplicativo, p. Fdisk. Mas exigia bibliotecas para execução. Estou procurando utilitário / ferramenta que me ajudará a criar um binário estático de binários já instalados. Para que eu possa usá-lo em qualquer lugar. As únicas ferramentas confiáveis ​​que eu encontrei é ErmineLight a partir daqui. Mas este é compartilhar-ware. Existe algum software de código aberto está disponível para o mesmo EDIT fdisk é apenas um exemplo. Eu na maioria das vezes trabalho em LFS, Então, se eu tenho que usar qualquer utilitário, eu preciso seguir os passos como Então só para salvar o tempo, estou procurando uma solução na qual vou fazer um binário estático do debian ou De fedora ou de outro distrbution, tentá-lo em LFS, e se trabalha muito bem ou como por minha exigência, eu irei com código-fonte para a compilação. Perguntou May 2 11 at 18:38 Bem. Isso parece uma idéia muito ruim. Mas, é possível. Como fdisk é open source, basta pegar sua fonte, e olhar para o Makefile. Você deve encontrar uma opção que passará - static para gcc na compilação. Eu não sou um guru de C / C, mas até onde eu sei criando um binário estaticamente vinculado a partir de um binário dinâmico existente não é possível. Se você quiser usá-lo em qualquer lugar, eu recomendo usar uma pequena distribuição de manutenção que começa em segundos e permite que você modifique tudo. Faz mais sentido para mim, porque você provavelmente vai querer modificar o disco executando a sua instalação Linux / UNIX. O link funciona para mim. A página tem o número de erros ortográficos / editoriais que você poderia esperar do trabalho de um programador profissional mais do que você esperaria de um site profissional, menos do que você esperaria de um e-mail de phishing. Sobre o mesmo que o post acima, venha a pensar nisso. Parece suspeito que este novo usuário 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 construído QT 5.0.1 estaticamente no VS 2018 no Windows 7 x64. Os parâmetros de configuração foram configurados - debug-and-release - opensource - confirm-license - platform win32-msvc2018 - exemplos de nomake - nomake testes - no-webkit - static e executei a compilação com o jom com os seguintes parâmetros: O processo de compilação foi bem-sucedido E eu posso encontrar todas as libs e link meu aplicativo com QT estaticamente. Agora o problema é que quando eu tento executar o aplicativo, ele me dá um erro Falha ao carregar janelas do plugin da plataforma. Plataformas disponíveis são: Mas abaixo deste erro, ele não aparece nenhuma plataforma. Eu encontrei o mesmo erro ao ligar dinamicamente QT. Eu me livrei disso colocando DLLs de dependência (qt5core. dll, qt5gui. dll etc) no mesmo diretório do meu exe. Mas eu não consigo descobrir um caminho dessa vez. Após a compilação estática do QT, as DLLs nos plugins / plataformas / pasta desapareceram e são substituídas por libs. Eu também tentei link estaticamente com qwindows. lib, mas sem sucesso. Qualquer idéia Cumprimentos. Para verificar quais DLL são necessários para implantar seu aplicativo no Windows, use dependência Walker (dependencywalker /). De acordo com a página de documentação Qt para Windows - Deployment algumas DLL são necessárias para implantar um aplicativo Qt em plataformas Windows: Dependendo do compilador que você usa para compilar o aplicativo, algumas outras bibliotecas podem ser necessárias: MSVC bibliotecas específicas: msvcrXX. dll msvcpXX. Dll Bibliotecas específicas MinGW libgccsdw2-1.DLL libstdc-6.dll Observação: em todos esses arquivos, substitua XX pela versão atual da DLL em seu sistema. Se você didnt construir Qt estaticamente (padrão), você também precisará Qt5 DLL dependendo do módulo Qt que você usa em seu aplicativo. Exemplo: Todas essas DLL podem ser encontradas na pasta bin, em seu diretório de instalação do Qt. EDIT Recentemente, desenvolvedores Qt criou uma ferramenta chamada windeployqt. exe que ajuda você a reunir todas as bibliotecas necessárias para implantar um aplicativo:

No comments:

Post a Comment