GCC 4 sous Windows [Résolu]

Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
- - Dernière réponse : cptpingu
Messages postés
3801
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 novembre 2019
- 1 févr. 2010 à 18:30
Bonjour,

J'utilise GCC 3.4.x depuis un moment et je suis dit : pourquoi pas passer à la version 4 ?

J'ai donc téléchargé la version 4.5 en 32 et 64 bits (tant qu'à faire).

J'arrive bien à compiler seulement j'ai des warning de ce type pour un hello world :
 warning: auto-importing has been activated without --enable-auto-import specified on the command line.
Info: resolving std::cout  by linking to __imp___ZSt4cout (auto-import)
This should work unless it involves constant data structures referencing symbols from auto-imported DLLs.


De plus il me demande des DLL pour lancer un hello world.
Je les ai mais ce n'est pas le problème, avec GCC 3.4.x un hello world ne demande pas de DLL.

Comment faire pour éviter le warning et pour ne pas avoir recours aux DLLs ?

Merci et bonne prog,
@++

Victor
Afficher la suite 

9 réponses

Meilleure réponse
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
3
3
Merci
Re,

Désolé pour le multi-post mais je ne peux pas éditer mes messages.

Voici donc la solution pour GCC 4.4.1 pour les DLL :
-static-libgcc


Mais cela ne fonctionne pas sur la version 4.5 sur la version que je teste.

Merci et bonne prog,
@++

Victor

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 205 internautes nous ont dit merci ce mois-ci

Commenter la réponse de victorcoasne
Messages postés
361
Date d'inscription
mardi 31 décembre 2002
Statut
Membre
Dernière intervention
19 mars 2015
0
Merci
La version 4.5 est toujours en cours de dév
donc peut-être un bug/régression

essaye avec la v4.4.3
Commenter la réponse de mogwai93
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
3
0
Merci
Bonjour,

Non apparemment le problème est récurent à tous les GCC 4.x, ils demandent des DLL pour les librairies standard C++.

Merci et bonne prog,
@++

Victor
Commenter la réponse de victorcoasne
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
3
0
Merci
Bonjour,

Je viens d'essayer avec GCC 4.4.1 mais il me demande toujours libgcc_s_sjlj-1.dll

C'est une DLL de moins qu'avec GCC 4.5 mais c'est déjà une de trop.

Merci et bonne prog,
@++

Victor
Commenter la réponse de victorcoasne
Messages postés
3801
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 novembre 2019
90
0
Merci
Merci pour cette solution, je la garde de côté au cas où.

A noter que pour l'instant gcc3 semble encore utilisé (ne serait-ce que par QT: http://doc.trolltech.com/4.6/compiler-notes.html)

_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
Commenter la réponse de cptpingu
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
3
0
Merci
Bonjour,

C'est normal que GCC 3 reste utilisé, il ne pond pas des executables à 4Mo pour un hello world avec des try catch.

Le pire c'est que je ne suis même pas arrivé à utiliser UPX.

Pour ceux que ça intéresse voici le code hello world :
#include 
#include <cstdlib>
using namespace std;

int main()
{
    try
    {
        cout << "Hello";
        throw 0;
    }
    catch(...)
    {
        cout << " world !" << endl;
    }
    system("pause");
}


Ligne de commande de compilation utilisé avec GCC 4.4.1 :
"32\bin\g++.exe" "hello world.cpp" -mthreads -static-libgcc -ohelloworld32.exe

"64\bin\g++.exe" "hello world.cpp" -mthreads -static-libgcc -ohelloworld64.exe

Taille des executables Windows :
- 32 bits : 3 722 ko
- 64 bits : 4 479 ko

J'ai voulu passer à GCC 4 pour deux raisons :
- Pas besoin d'une DLL pour les exceptions multi-thread
- Support du 64 bits

En attendant que GCC 4 sache faire des executables de taille correcte je reste à GCC 3.4.5 pour compiler des programmes 32 bits.

Merci et bonne prog,
@++

Victor
Commenter la réponse de victorcoasne
Messages postés
3801
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 novembre 2019
90
0
Merci
Est-ce une spécificité Windows ? Je n'ai pas fait la comparaison entre gcc3 et gcc4 sous Unix, mais ton exemple compilé avec g++4.4.1 en 32bits, done:

> g++ hello.cc -static
> ls
1,2M a.out*

Sans le static, on descend même à:

> g++ hello.cc
> ls
9,1K a.out*


Avec le multithreading activé:

> g++ hello.cc -static -pthread
> ls
1,3M a.out*

Sans le static, même taille (logique):

> g++ hello.cc -pthread
> ls
9,1K a.out*


Pour le morceau de code:
- Pas besoin de system pause. Il y a une manière plus portable de le faire.
- return 0; /* Certe pas obligatoire d'après les spécifications du C++, mais bon c'est un peu moche */
- Evite les using namespace. Voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace

_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
Commenter la réponse de cptpingu
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
3
0
Merci
Bonjour,

> Pas besoin de system pause.
Si dans mon cas c'est pour vérifier avec le gestionnaire des tâches que le programme est 32 bits ou 64 bits
> Il y a une manière plus portable de le faire.
Je voulais pas m'embêter à faire des fonctions qui affiche un texte et attend une saisie d'une touche quelqu'elle soit. C'est la manière la plus rapide sous Windows.
> Evite les using namespace.
Ne t'inquiète pas je les utilises à bon escient, mais là c'est un hello world vite fait.

Sans le static avec GCC 4.4.1 :
- 32 bits : 3 704 ko
- 64 bits : 4 481 ko

Sous gcc 4.5 sans le static (avec les avertissements cités plus haut) :
- 32 bits : 42 ko
- 64 bits : 46 ko
Avec static mais avec une dépendance persistante aux DLL :
- 32 bits : 64 ko
- 64 bits : 72 ko
Pour info les DLL de dépendances font respectivement pour GCC 4.5 :
- 32 bits :
- libgcc_s_sjlj-1.dll : 419 ko
- libstdc++-6.dll : 4,95 Mo
- 64 bits :
- libgcc_s_sjlj-1.dll : 486 ko
- libstdc++-6.dll : 5,89 Mo

Essaye en 64 bits de compiler pour voir si ça augmente de beaucoup.

Merci et bonne prog,
@++

Victor
Commenter la réponse de victorcoasne
Messages postés
3801
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 novembre 2019
90
0
Merci

> g++ hello.cc -m64
> ls
15K a.out*


> g++ hello.cc -m64 -pthread
> ls
15K a.out*


> g++ hello.cc -m64 -static
> ls
1,4M a.out*


> g++ hello.cc -m64 -pthread -static
> ls
1,4M a.out*


g++ --version


g++ (Ubuntu 4.4.1-4ubuntu9) 4.4.1
Copyright (C) 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
Commenter la réponse de cptpingu