Newsgroup: it.comp.lang.c++
Titolo: [forse OT] Compilatore g++

Salve,
ho un problema compilando sorgenti C++ con g++ in Mac OS X: mi vengono
sorgenti enormi anche compilando poche righe tipo "hello.cpp":
Normalissimo e classico
---code
#include <iostream>
int main() {
        std::cout << "Ciao, Mondo Nuovo!\n";
        std::cout << "Sono C++" << std::endl;
}
---code
g++ hello.cpp -o hello
-rwxr-xr-x  1 salvo  admin    652K 18 Ago 12:01 hello
-rw-r--r--  1   salvo  admin    136B 18 Ago 11:59 hello.cpp
mentre in C con
gcc hello.c -o hello
ottengo
-rwxr-xr-x  1 salvo  admin    11K 20 Lug 18:38 hello
-rw-r--r--  1   salvo  admin    58B 20 Lug 18:38 hello.c
E' normale?
Se il sorgente è più lungo ottengo risultati simili (sempre circa
650-750 kb)
Stesso problema (qui OT) con Pascal e gpc
cosa sbaglio?
grazie a chi vorrà rispondere.
ciao,
-- 
salvo

§alvomi© wrote:

nulla.
chiamando <strip --strip-all hello> cosa risulta?
-- 
"Dato che sono un duro non mi aspetto di piacervi, ma piu' mi odierete e 
piu' imparerete. Io sono un duro pero' sono giusto, qui non si fanno 
distinzioni razziali, qui si rispetta la gentaglia come negri, ebrei, 
italiani e messicani: qui vige l'uguaglianza non conta un cazzo nessuno!"

 cosa sbaglio?
Prova con:
gcc hello.cpp -lstdc++
Non mi sono chiesto il perché ma con la
versione 3.3 anch'io ottengo quelle dimensioni
mentre la 3.2 mi dava dimensioni minime...
-- 
SiMoStro

 chiamando <strip --strip-all hello> cosa risulta?
qui non accetta -strip-all
[ Usage: strip [-AnuSXx] [-] [-d filename] [-s filename] [-R filename]
[-o output] file [...] ]
comunque, 
strip hello -o hellostrip
-rwxr-xr-x  1 salvo  admin    652K  2 Set 17:53 hello
-rw-r--r--  1   salvo  admin    136B 18 Ago 11:59 hello.cpp
-rwxr-xr-x  1 salvo  admin    364K  2 Set 17:55 hellostrip
si riduce da 652kb a 364kb
Dunque?
grazie di tutto, ciao
salvo

 mentre la 3.2 mi dava dimensioni minime...
Sarà bacato g++ 3.3?
O è impostato male?
grazie, ciao
salvo
-- 
#!/usr/bin/perl
print "NeXT tip => /me == (~§alvomi©~ @ddress) - (Alfa kai Omega) \n";

 O è impostato male?
Non so, g++ è semplicemente un programma che richiama
gcc con il "linguaggio standard" impostato a C++
ed effettua le opportune impostazioni per linking.
Come ti ho detto, per me il linking con la libreria
standard genera file piccoli.
 
-- 
SiMoStro

 standard genera file piccoli.
In Mac OS X ho:
gcc2, gcc-3.3, g++2, g++3.3
Dunque rinominando hello.cpp in a.cpp
ho provato g++ a.cpp -o a1 e g++2 a.cpp -o a2
ed ecco cosa ottengo:
-rw-r--r--    1 salvo  admin    136B  2 Set 21:31 a.cpp
-rwxr-xr-x  1 salvo  admin    652K  2 Set 21:32 a1
-rwxr-xr-x  1 salvo  admin    119K  2 Set 21:32 a2
Decisamente diversi.
ciao,
salvo

 O è impostato male?
Se fosse Windows sarebbe assolutamente normale.
E' una delle FAQ del compilatore (il mingw che è il gcc portato su windows),
il motivo è che il linker si vede costretto a linkare staticamente un sacco
di codice a causa di varie implicazioni legali. Forse potrebbe accadere
qualcosa di simile anche sotto MacOS X.
Comunque a parte la sorpresa di trovarsi 300Kb di codice, con le capacità
dei moderni calcolatori è un piccolo costo fisso acettabile... Nei programmi
veramente "corposi" di quei 300Kb nemmeno te ne accorgi.
Se poi programmi applicazioni GUI con un qualsiasi framework "rimpiangerai"
quei pochi Kilobyte "sprecati"...
Ecco il testo delle FAQ (per mingw), giusto a titolo informativo
http://www.mingw.org/mingwfaq.shtml#faq-C++size
ciao.

 
http://www.mingw.org/mingwfaq.shtml#faq-C++size
grazie, me lo guardo subito :)
ciao,
salvo

 -rwxr-xr-x  1 salvo  admin    119K  2 Set 21:32 a2
Su icm ti ho gia` risposto... cmq per la cronaca...
Il problema e` che il 3.3 non fa linking dinamico. Ragion per cui la
libreria standard e` linkata staticamente.
Il gcc 3.4 invece lo fa.
Tutto e` valido sotto MacOS X, sotto altre piattaforme che io sappia il
3.3 fa comunque dinamico :))
-- 
RiK0
Non credo negli schemi non vincenti.

 Dunque?
come "dunque"? intanto hai tolto 300 KB, non sei contento? :)
il fatto è che la libreria del C++ è probabilmente più corposa di quella 
del C, per non parlare che in C++ hai anche la RTTI e l'EH che 
sicuramente qualcosa portano via...


 sicuramente qualcosa portano via...
infatti il problema sta nell'inclusione della libreria:
provando a compilare un
int main() {}
*senza* #include <iostream> viene meno di 12kb, appena ci metto la riga
di include torna a circa 600kb...
Compilando lo stesso con g++2 (non 3.3) e poi strippando vengono circa
90kb.
In C non ho notato particolari "ingrossamenti" neppure con molte
librerie incluse.
ciao
salvo

 Che se tanto mi da tanto dovrebbe fare il dinamico. 
non me lo trovo, ho:
/usr/bin/gcc     /usr/bin/gcc-3.3 /usr/bin/gcc2    /usr/bin/gcc3
e
/usr/bin/g++     /usr/bin/g++-3.3 /usr/bin/g++2    /usr/bin/g++3
e i link /usr/bin/gcc -> gcc-3.3 e /usr/bin/g++ -> g++-3.3
ciao,
salvo

 sicuramente qualcosa portano via...
È anche possibile ch'il compilatore C usa per default una biblioteca
dinamica, il C++ invecci una statica.
--
James Kanze           GABI Software         
http://www.gabi-soft.fr
Conseils en informatique orientée objet/
                   Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, 
+33 (0)1 30 23 00 34

 non me lo trovo, ho:
installalo con i developers tools. fai installazione personalizzata.
f/up icm
