Configurando seus projetos no Visual Studio

2008/02/21

Ao iniciar na arte da programação em C no Visual Studio, eventualmente o programador irá querer testar seus programas rodando em outra máquina que não seja a de desenvolvimento, mandar uma versão beta para amigos, pra namorada e pro seu cachorro. Geralmente, por padrão, existem algumas dependências do programa compilado com uma DLL de runtime da versão do ambiente em que foi compilado o dito cujo, dificultando um pouco a distribuição do seu motherfucker-program.

Porém, seus “poroberemas se acabaram-se”. Com o inovador configurador de projetos do Visual Studio, tudo o que você queria é possível, e ainda mais!

_Nota do autor: isso não foi uma propaganda gratuita, apenas uma piada. Se fosse um verdadeiro anúncio das maravilhas do Visual Studio, eu agora estaria falando daquele tal código gerenciado e o tal do C++ CLI._

Inicialmente, se compilarmos um programa em Debug no Visual Studio 2005 teremos as seguintes dependências:

Dependências do Hello, World

A DLL kernel32 é nativa e sempre estará presente no Windows. Porém, a msvcr80d não. Ela veio junto com o pacote do Visual Studio, e se não for distribuída em outras máquinas, você não conseguirá rodar seu programa, pois isso gerará o seguinte erro:

Erro de dependência por causa da DLL do Visual Studio

Bem, para resolver isso, a partir da IDE, temos que ir em Project, Properties, Configuration Properties, C/C++, Code Generation, Runtime Library.

Code Generation

Existem atualmente quatro tipos de runtime que você pode escolher:

_Essas runtimes são chamada de multi-threaded porque antigamente existiam versões single-threaded dessas mesmas __runtimes. Contudo, versões mais novas do Visual Studio só vêm com esse sabor mesmo._

Note que, por padrão, existem dois tipos de configuração em seu projeto: Debug (para testes) e Release (para distribuição). Convém não misturar configurações Debug com DLLs Release e vice-versa, a não ser que você tenha certeza do que está fazendo.

Pois bem. Para tirar a dependência da maldita DLL, tudo que temos que fazer é alterar a configuração, nesse caso Debug, de /MDd para /MTd. E recompilar.

Dependências do Hello, World - parte 2

E testar.

Execução do Hello World com sucesso, sem dependências.

Problemas com manifesto

Além da dependência de DLLs, alguns casos especiais vão chiar por causa dos dados do manifesto embutidos no programa compilado. Por algum motivo que eu desconheço, o programa necessita que as DLLs estejam instaladas mesmo que no Dependency Walker não mostre nada. Nesses casos, uma arrancada do manifesto na versão Debug não fará mal algum.

Manifesto Settings

Mais problemas?

Acho que esses são os únicos empecilhos iniciais para testar seu programa em outras máquinas. Sempre que ver o erro exibido no começo desse artigo, desconfie de alguma dependência que não está presente na máquina. Nessas horas, ter um Dependency Walker na mão vale ouro.

Facebook | Twitter | Linkedin | Google