Pergunta

Eu estou querendo saber como fazer uma versão de compilação que inclui todos os arquivos dll necessários para o .exe para que o programa possa ser executado em uma máquina de desenvolvimento não sem ter que instalar o microsoft redistribuível no computador de destino.

Sem fazer isso, você receber a mensagem de erro que o aplicativo de configuração não é correto e reinstalar.

Foi útil?

Solução

  1. Escolha Project -> Propriedades
  2. Selecionar Configuração -> Geral
  3. Na caixa de como você deve ligar o MFC, escolher para ligar estaticamente ele.
  4. Escolha O Linker -> Entrada.Sob Dependências Adicionais, adicionar todas as bibliotecas que você precisa do seu aplicativo para estaticamente link.

Outras dicas

Você precisa definir a biblioteca de tempo de execução (Em C/C++ -> Geração de Código) para TODOS os projetos para ligação estática, que se correlaciona com o seguinte padrão de construção de configurações:

  • Multithreaded Debug/Release
  • Single-Threaded Debug/Release

Como oposição a "DLL" versões dessas bibliotecas.

Mesmo se você fizer isso, dependendo as bibliotecas que você estiver usando, você poderá ter que instalar um Módulo de Intercalação/framework/etc.Depende de como a BIBLIOTECA estática versões de suas dependências estão disponíveis.

Esteja ciente de que A Microsoft não é recomendável que você vínculo estático o tempo de execução em seu projeto, como esta o impede de ser atendido pelo windows update para correção de segurança crítica bugs.Há também o potencial de problemas se você estiver passando de memória entre o seu principal .e exe .arquivos dll como se cada um desses links estáticos, o tempo de execução, você pode acabar com malloc/free problemas de incompatibilidade.

Você pode incluir as DLLs com o executável, sem compilá-los em um .exe, e sem correr o redist ferramenta - isso é o que eu faço e ele parece funcionar bem.

A única mosca na sopa é que você precisa para incluir os arquivos duas vezes se você estiver distribuindo para uma ampla gama de versões do Windows mais recente OSs precisa dos arquivos de manifesto-definidos diretórios e mais antigos todos os arquivos no diretório do programa.

Você ficaria olhando para ligação estática (como oposição a vincular dinamicamente)

Eu não tenho certeza de quantos o MS redistributables estaticamente link.

Se você estiver olhando para encontrar para fora que o dll do seu computador de destino está faltando, então, usar depends.exe o que costumava vir com MSDev, mas também pode ser encontrado aqui.Teste isso em algumas máquinas de destino deve dizer-lhe que a dll que você precisa do pacote com seu aplicativo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top