GCC 4 sous Windows

Résolu
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 - 30 janv. 2010 à 01:50
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 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

9 réponses

victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
30 janv. 2010 à 23:11
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
3
mogwai93 Messages postés 362 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 4 novembre 2023
30 janv. 2010 à 19:49
La version 4.5 est toujours en cours de dév
donc peut-être un bug/régression

essaye avec la v4.4.3
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
30 janv. 2010 à 21:13
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
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
30 janv. 2010 à 23:07
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
1 févr. 2010 à 10:18
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]
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
1 févr. 2010 à 12:52
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
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
1 févr. 2010 à 14:15
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]
0
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
1 févr. 2010 à 17:15
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
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
1 févr. 2010 à 18:30

> 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]
0
Rejoignez-nous