Ajuda com compilação em C++

11 respostas
Abdon

Galera é o seguinte, tenho um programa que compila no VS2008, ele é uma dll que é um plug-in para o firefox.

Gerando esse Dll pelo VS2008 funciona perfeitamente. O problema é que so funciona na minha maquina, por causa do .net framework. Existe alguma forma de fazer o VS2008 compilar uma dll sem que seja para utilizar com o .net framework?

Estou utilizando o Visual C++ 2008

Em paralelo estou tentando portar essa compilação para o Dev-C++, o projeto já esta compilando, porem a dll fica bem menor e o firefox não a reconhece. Existe algum truque para compilar Dll do Dev-C++?

Muito obrigado se alguem puder me dar qualquer luz.

11 Respostas

pablosaraiva

Só precisa do .net Framework se você usar .net no código.

Se for código C++ puro, não precisa.

O código no devcpp tá compilando e não funciona?

Eu sugiro debugging. Teste as partes do código individualmente e verifique o que não está funcionando.

Caso o código não seja enorme, poste aqui.

E

Esse não é o problema; não tem nada a ver com o .NET Framework. Na verdade, é uma opção de compilação que faz que ele requeira as bibliotecas de runtime do C++ (que ficam em \windows\winsxs*).

Veja se é possível alterar a opção de compilação, trocando de “Multithreaded DLL” para “Multithreaded”.


Abdon

Cara funcionou como magica, a dll ficou 7 vezes maior e o meu plugin para o firefox funcionou perfeitamente agora vou fazer um para o IE e já sabendo disso não vou apanhar nesse ponto denovo !!

Muito Obrigado Mesmo !! Vc não sabe o quanto me ajudou !!

Abdon

pablosaraiva obrigado pela atenção, a dll gerada pelo Dev C++ ficava menor que a primeira dll gerada pelo visual studio, e não era possivel de realizar depuração pois quando eu iniciava o firefox a dll nem subia. Na verdade eu tenho um “esquema” de log na minha dll que da para depurar legal mas ele nem chega a iniciar.

E

Ainda bem que sua DLL não depende do .NET Framework.

Se dependesse, você TERIA de usar a opção “Multithreaded DLL”, e aí você teria de instalar a versão nova do runtime do Visual C++ (que foi atualizada recentemente em agosto de 2009. Isso é uma imposição do .NET Framework (que depende de a DLL ter sido compilada com “Multithreaded DLL” ou “Multithreaded Debug DLL”. )

Provavelmente é por isso que não sobe nas outras máquinas. Para provar que é esse o caso, experimente rodar um Windows Update completo nessas máquinas que estavam com problemas, e tente rodar a DLL antiga (que era menor e usava a opção de compilação antiga). Se depois disso o plugin do Firefox subir, isso quer dizer que a atualização fez com que fosse instalada a versão nova do runtime do Visual C++.

ViniGodoy

Só um detalhe. Antes que você comece a sofrer com essa IDE, mantenha-se mesmo no Visual Studio 2008 (o express é free) ou, se fizer questão de compilar no MinGW, migre para o code::blocks: http://www.codeblocks.org/

O MinGW do dev é muito antigo e a IDE é cheia de bugs. Entre o mais enervante, está o fato dela omitir parte da mensagem de erro, o que pode tornar o seu trabalho de encontrar um problema um verdadeiro inferno.

E

De modo geral, até para evitar problemas estranhos, é sempre melhor compilar plugins com a mesma versão de compilador que o produto foi compilado. Por exemplo, o Firefox para Windows é compilado normalmente com o MS Visual Studio, assim como o Java da Sun, então um plugin para o Firefox ou uma DLL JNI têm melhores probabilidades de funcionar corretamente se forem compilados com o MS Visual Studio.

( O Java da Sun para Solaris é compilado, obviamente, com o Sun Studio, mas ele é de graça ).

Abdon

@vini, muito obrigado pela dica, vou me livrar do dev C++

@entanglement, agora dei uma pesquisada e vi que o que vc escreveu, sobre a versão do compilador, esta na especificação da Gecko SDK (para plug-in do firefox), passou desapercebido por mim no começo.

Muito Obrigado pela atenção galera !!

Abdon

Aproveitando que já estamo aqui mesmo :slight_smile:

Alguem de vcs sabem sobre alguma boa IDE para linux para programar em C++ ??

acredito que compilador não tem muito o que pensar, gcc na veia.

Tipo eu até sei compilar e linkar na mão com GCC mas acredito que assim como no windows, deve ser lincado algum .so ou .o do sistema operacional para a o meu arquivo .so do linux rodar corretamente.

B

O Vini já lhe respondeu - é o Code::Blocks.

Abdon

Vc tem razão, não sei prq pensei que o code::blocks era apenas windows.

Muito Obrigado a todos, se alguem tiver curiosidade em ver como é um XDCOM Scritable Firefox Plugin estou anexando por carater de curiosidade, é so baixar a gecko sdk compilar e um abraço.

Criado 14 de dezembro de 2009
Ultima resposta 15 de dez. de 2009
Respostas 11
Participantes 5