Logo Hardware.com.br
jcferranti
jcferranti General de Pijama Registrado
4.7K Mensagens 162 Curtidas

Compilação estatica em C++ e QT.

#1 Por jcferranti 08/09/2009 - 16:55
Pessoal, to com o seguinte problema:

Construi uma aplicação baseada em C++ e Qt, para que a mesma pudesse rodar tanto em Windows quanto em Linux. Tá funcionando direitinho.

O problema é o seguinte: Para rodar em outros computadores, necessito da dll do MingW e Qt4, sendo que essa dll do Qt4 tem 165mb. Já procurei saber como compilar estaticamente no MingW, mas não está funcionando com o meu projeto Qt.

Alguém tem alguma idéia de como compilar estaticamente no MingW de forma que ele não necessite de nenhuma dll extra?

Usado:
- Qt framework 4
- Qt Creator
- MingW 3.4.5
- Se possivel usando o Makefile.
jcferranti
jcferranti General de Pijama Registrado
4.7K Mensagens 162 Curtidas
#3 Por jcferranti
08/09/2009 - 22:55
mcv disse:
Você precisa ter as bibliotecas ".a", não as "dll.a".

Nao, nao, eu quero compilar de forma estatica no Windows.
Quando tento usar em outro computador ele pede diretamente pelas dlls.

Provavelmente a QT deve ter a opção de compilar bibliotecas estáticas. Veja nas opções do arquivo configure.
Existe a opcao no MingW e Gcc de usar o parametro -static, mas nao esta funcionando, ou melhor, nao esta tendo o efeito que eu esperava. Na verdade parece nao estar tendo efeito.

Mas se as dll são tão grandes, o executável também não ficará pequeno.
sim, eu sei, mas se ele ficar com metado do tamanho ja sera bom.
Casa:MS Windows Seven (empolgando)
Trampo: MS Windows Seven (desapontando)

Quer um Fórum exclusivamente sobre Open Source? Aqui: www.linuxbsd.com.br/forum
jcferranti
jcferranti General de Pijama Registrado
4.7K Mensagens 162 Curtidas
#5 Por jcferranti
09/09/2009 - 11:23
mcv disse:
Vou tentar explicar menhor. Para que o executável não pessa as dlls, você precisa compilar com as bibliotecas estáticas (.a). Você precisa recompilar a biblioteca QT para obtê-las se o pacote não tiver.

ops! Era esse meu medo! Já tinha achado alguns tutoriais indicando ter que recompilar a Qt, mas eu ainda tinha esperanças de que não fosse necessário.

Bom, vou verificar se o pacote original da Nokia vem com as .a, senão vamos a obra de compilar a Qt!


Atualização:
As biblitecas .a estão lá na pasta lib, mas como eu faço para que o compilador as use ao invés de tentar usar as dlls? A chamadas às bibliotecas já estão definidas no Makefile.choramingando.gif
Casa:MS Windows Seven (empolgando)
Trampo: MS Windows Seven (desapontando)

Quer um Fórum exclusivamente sobre Open Source? Aqui: www.linuxbsd.com.br/forum
mcv
mcv Veterano Registrado
1.2K Mensagens 40 Curtidas
#6 Por mcv
10/09/2009 - 02:58
No caso, essas libs provavelmente não são as bibliotecas reais, apenas servem como intermediárias para as dlls. Você pode verificar isso vendo se há uma diferença muito grade de tamanho entre elas e as dlls.

Você terá que recompilar a QT. Deve haver um executável chamado configure.exe. Passe para ele a flag "-static". Nunca recompilei no Windows, talvez seja necessário setar o path das ferramentas do ming, como por exemplo mingw32-make e mingw32-g++.
jcferranti
jcferranti General de Pijama Registrado
4.7K Mensagens 162 Curtidas
#7 Por jcferranti
10/09/2009 - 12:11
mcv disse:
No caso, essas libs provavelmente não são as bibliotecas reais, apenas servem como intermediárias para as dlls. Você pode verificar isso vendo se há uma diferença muito grade de tamanho entre elas e as dlls.

Você terá que recompilar a QT. Deve haver um executável chamado configure.exe. Passe para ele a flag "-static". Nunca recompilei no Windows, talvez seja necessário setar o path das ferramentas do ming, como por exemplo mingw32-make e mingw32-g++.


exatamente, descobri que teria que fazer isso ontem e já passei por problemas e resolvi.
Então, fica a dica para quem passar pelo mesmo problema:
- Recompilar a Qt:
-- Entre no console da Qt: Menu iniciar -> Qt SDK (ou outro) -> Qt Command Prompt
-- Sete as variaveis de ambiente include e lib para as respectivas pastas do mingw ou Compilador que for usar (só testei com o MingW e com o MS VC++ 6.0 deu erro).
-- Dê o comando: configure -static
-- Dê o comando: mingw32-make sub-src (ou make)
-- Não sei sei o quanto é necessário, mas dei um make install só por garantia.


Bom, agora é tentar compilar com essas novas bibliotecas. Volto aqui para dar o resultado!
Casa:MS Windows Seven (empolgando)
Trampo: MS Windows Seven (desapontando)

Quer um Fórum exclusivamente sobre Open Source? Aqui: www.linuxbsd.com.br/forum
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal