Rodrigo Strauss :: Blog
Distribuindo aplicações feitas com o Visual C++ 8
O Visual C++ 8 (que faz parte do Visual Studio 2005) trás além de diversas melhorias, mudanças na distribuição dos softwares compilados com ele. Algumas coisas importantes devem ser notadas, como o fato de que distribuir aplicações em versão DEBUG é uma violação de EULA.
O Visual C++ é atualmente a única ferramenta da Microsoft que possibilita que você compile um programa que não depende de runtimes ou DLLs adicionais, um programa que é 100% Windows e só. Mesmo assim, para fins de redução de tamanho dos arquivos binários e para facilitar a distribuição, muitos programadores preferem fazer link do aplicativo com a msvcr80.dll, mfc80.dll e atl80.dll. Nesse quesito, a grande mudança no Visual C++ 8 é que as runtimes da MFC e ATL devem ser distribuídas usando MSI ou mantidas na pasta do aplicativo (o que é uma recomendação antiga da Microsoft para diminuir do DLL Hell). O MSI (ou merge module se você fizer seu próprio setup) instalará as runtimes usando o recurso Shared Assemblies do Windows XP ou superior, para evitar que atualizações da runtime quebrem programas que estejam funcionando.
(Só não esqueça que o Shared Assemblies é um recurso do Windows e não do .NET. As runtimes do Visual C++ 8 não têm qualquer dependência do .NET Framework e seus programas C++ serão nativos como sempre foram. C++ == nativo/unmanaged, C++/CLI == .NET/managed.)
Apesar dos novos complicadores, existe uma documentação bem explicada e detalhada na MSDN, com destaque para o How to deploy using XCOPY e Visual C++ Libraries as Shared Side-by-Side Assemblies, que lista as DLLs necessárias e suas respectivas funções.
Se mesmo assim a coisa complicar, configure o seu projeto para fazer link estático com todas as bibliotecas (C++ runtime, MFC ou ATL) e você terá o velho e bom executável sem dependências e que roda em qualquer máquina com Windows instalado. :-)
Em 22/02/2006 20:41, por Rodrigo Strauss





É uma decisão dificil... escolher entre facilidade (linkar tudo estaticamente) ou fazer seu executavel comer menos memoria... (linkar tudo dinamicamente e rodando com as dll's que tiverem em windows\system\etc...)