Como reduzir o binario de um c++?

9 respostas
bandrade

pessoas… é o seguinte… no java a gente pode usar um ofuscador pra tirar as classes e funcoes desnecessarias e tal… soh que eu to com um problema gigante…
minha aplicação tah dando uns 200K e preciso q ela tenha até 100K pois é pra aplicativos móveis… então, alguem tem noticia de algum ofuscador pra C++??

antes q vcs falem q eu sou um péssimo programador por fazer uma aplicação tão grande eu explico: a gente tem uma biblioteca pra subir um pouco o nível e deixar a programação (MUITO) mais fácil… dai a aplicação cresce né…

ah, jah busquei aki no chat e no google (antes q me xinguem… (;
sem muito sucesso… );

valeu,

9 Respostas

pcalcado

Qual compilador mesmo?

cv1

Em C++, eu sinto dizer, mas nao tem milagre. O jeito eh verificar todos os includes e todas as bibliotecas utilizadas e ver o que da pra cortar. Eh um porre, eu sei, mas…

Outra alternativa eh fazer um self-loader que carrega o codigo gzipado dele mesmo, do mesmo jeito que o bom e velho DOS4GW fazia…

pcalcado

Olá,

Dica de um programador C++ amigo meu (valeu, Gabriel):

que tal o flag -O2 (onde 2 é o nível de otimização, depende do compilador, pode ser maior ou menor) ?

pcalcado

http://www.catch22.net/tuts/minexe.asp

T

Tem algumas opções de compilação que você pode tentar, mas com resultados não muito satisfatórios, e nem sempre disponíveis no seu compilador (é o Embedded Visual C++ que você está usando? Se for, não sei exatamente quais as opções porque não estou com ele instalado aqui, e de qualquer maneira ele tem menos opções que o compilador MSVC++ normal.)
Uma delas é o /Os (favor code space), mas não adianta muito (deve reduzir no máximo uns 4K no seu programa de 200 K.
Outra delas é o /Gf (enable string pooling), que na hora da link-edição deve pegar a maior parte das constantes strings repetidas, e criar apenas uma cópia - acho que ela deve ser combinada com /GF (enable read-only string pooling).
Não é necessário repetir que tais opções de compilação devem ser aplicadas para todo o código, incluindo as bibliotecas que estão sendo usadas.
Deve haver alguma opção no linker para tentar reduzir o tamanho ao máximo possível também.
E obviamente você tem de compilar em modo Release e remover um monte de comodidades (por exemplo, mesmo em modo Release é possível ter informação de depuração, o que ajuda na hora de detectar problemas em uma aplicação na produção. Veja se isso não está sendo incluído também).

louds

dependendo da plataforma, você pode dar strip nos símbolos do executavel.

Mande o teu linker gerar um mapa do executavel e veja onde tem gordura.

renatosilva

UPX

fmeyer

é gcc ??

se for a melhor otimização é -O3.
Dica, se voce tiver uma heap razoavel, troque variaveis estaticas como estruturas por ponteiros e não use muito a pilha, não sei por que cargas d’agua o C++ gera um executavel maior para variaveis staticas e de pilha

bandrade

puts… vamos lah… utilizio o Visual Estudio pra codificação (é, pra brew eh esse mesmo… não tem melhor) e o ARM para a geração do mod (que é o executável do BREW), geração dos .o e depois do .mod né… ele eh responsável pela linkedição… );

aaahhh… odeio o mundo de compilados… );

Criado 27 de abril de 2005
Ultima resposta 27 de abr. de 2005
Respostas 9
Participantes 7