IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

MSVC2005 : Compilation d'un .lib donne 1Go


Sujet :

C++

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut MSVC2005 : Compilation d'un .lib donne 1Go
    Bonjour à tous,


    J'ai une librairie statique d'utilitaire qui possède une dizaine de classe, après compilation j'obtient un fichier .lib de 10mo

    J'ai une seconde librairie statique de gestion qui utilise la première et qui possède une 10/15 classes, le .lib fait également 10mo

    Par contre, j'ai une troisième librairie statique qui utilise la seconde, qui elle possède 55 classes métiers, le .lib généré fait près d'1Go.. 963Mo plus exactement.

    Du coup je me retrouve souvent avec des erreurs de link
    fatal error LNK1106: fichier non valide ou disque plein*: impossible de rechercher sur 0x2E9D3B9F
    Dans les options de compilation, j'ai laissé par défaut en Release.

    Est-ce que ça peut être le fait que toutes mes classes de la troisième librairie héritent de classes template de la seconde ? Pour une classe métier, le compilateur va générer 3 classes supplémentaires.
    Mais ça fait 4 * 55 = 220 classes, qui sont en générale assez petite, ça fait beaucoup 1Go pour ça nan ?

    J'utilise également une hiérarchie éparpillée qui va faire dériver une classe de mes 55 classes métiers + une classe de singleton.


    Je peux faire quelque chose ?


    Merci,

    A bientôt
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  2. #2
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    Ajoutes-tu d'autres librairies de manière statique à ton projet? Genre les MFC?
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Points : 858
    Points
    858
    Par défaut
    Combien de lignes de code au total ? Parce que 1Go c'est énorme pour un .lib, ce n'est pas quelques centaines de classes qui vont générer un fichier aussi gros, sauf ci elles ont plusieurs millions de lignes de code chacune, si elles utilisent des grands tableaux statiques, ou si inline est utiliser à tout bout de champs.

  4. #4
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Déjà 10Mo pour une dixaine de classes, ça me parait énorme...

    Ya l'utilisation massive de templates d'autres lib (par exemple boost) qui peut grossir ta lib, l'inclusion d'autres lib comme dit précédemment...

    1Go... a mon avis ya un problème quelque part...

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    J'ai essayé de retirer l'option /Zi, qui génère une base de donnée du programme. J'ai baissé de 100Mo à peut prêt et les deux p'tites lib de 1Mo

    Sinon comme librairie, j'utilise xerces 2.8 seulement dans la troisième c'est tout.
    J'ai pas mon projet sous les yeux là, mais dès que je reviens en France je vous détaillerai ce que j'ai.

    J'essayerai également de faire un nouveau projet, relaisser tout par défaut, et intégrer mes classes voir si c'est pas moi qui ai modifié une option du compilateur par mégarde, mais bon, j'avais déjà créé un projet vide et m'étais basé dessus pour remettre toutes les options par défaut...


    Merci
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  6. #6
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Quel type de projet exactement?

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    Comment ça quel type de projet ?

    Console ? Win32 ? etc... ?
    J'avais commencé en console, puis voyant ces 1Go, je suis passé en "subsystem:windows" et j'ai remplacé le main par un winmain, mais ça n'a rien changé.

    Est-ce que c'est bien ça que tu me demandais ?

    En tout cas merci


    A bientôt
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  8. #8
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Oui, normalement même en console si tu as selectionné "vide" (pas de source code au démarrage) tu ne devrais pas avoir le problème...

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    Ayé j'ai trouvé mais c'est un peu space.

    Si je retire l'option "/LTCG (Génération de code durant l'édition de liens)", ma librairie tombe à 26mo....
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  10. #10
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    Citation Envoyé par mister3957 Voir le message
    Ayé j'ai trouvé mais c'est un peu space.

    Si je retire l'option "/LTCG (Génération de code durant l'édition de liens)", ma librairie tombe à 26mo....
    Citation Envoyé par msdn
    The /LTCG option tells the linker to call the compiler and perform whole program optimization.
    Je me demande ce qu'ils ont bien pu optimiser pour faire passer la taille de la librairie de 26 Mo à 1 Go

  11. #11
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    Bé ué :s
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  12. #12
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    Personnellement, 26 Mo, je trouve cela encore très gros. Maintenant, je ne sais pas à quoi sert ta librairie.

  13. #13
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    Y'a toute la gestion de mes données métiers avec ce qui va autour (connexion à plusieurs sources de données par exemple).
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  14. #14
    Membre éclairé Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Points : 871
    Points
    871
    Par défaut
    Citation Envoyé par stephl Voir le message
    Je me demande ce qu'ils ont bien pu optimiser pour faire passer la taille de la librairie de 26 Mo à 1 Go
    De l'inlining par exemple.

  15. #15
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    OK, merci. Je suppose que c'est ce qui doit expliquer la taille de la lib.

  16. #16
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    Citation Envoyé par HanLee Voir le message
    De l'inlining par exemple.
    Oui, mais là pour le coup, ils ont dû inliner TOUTES les fonctions pour que cela fasse 1 Go!!! Je ne suis pas certain qu'on gagne en performance à tout inliner.

  17. #17
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Ca dépends ce qui est inliné en fait... il se peut que ça boost les perfs à l'execution mais le contraire aussi est possible...
    Dans tous les cas, tu peux pas savoir sans tester la différence et a mon avis c'est pas une lib qui doit nécessiter des performances de taré.

  18. #18
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par stephl Voir le message
    Oui, mais là pour le coup, ils ont dû inliner TOUTES les fonctions pour que cela fasse 1 Go!!!
    Il n'a pas forcément inliné quoi que ce soit. Cette option à pour objectif de permettre d'iniliner au moment où l'on créera le programme final. Au moment où la bibliothèque est créée, on ne sait pas encore quelle fonction sera inlinée ou pas à terme. Donc, on met dedans plein d'information pour permettre cet inlining au cas où. Schématiquement, on met tout le code source dans le .lib.

    Que le résultat fasse 1Go me semble beaucoup.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  19. #19
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    Nan y'a que quelques fonctions qui selon moi demande des perfs assez évoluées de par leur utilisation et leur complixité, mais le compilateur ne le sait pas.

    Si ça peut vous aider, j'ai une soixantaine de classes qui via les templates en génère 3 chacune. Chacune de ces classe métier ne possède actuellement que des accesseurs.

    Mais ouais 1Go pour ça.... avec les erreurs de link en prime, c'est un peu juste
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  20. #20
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par stephl Voir le message
    Je me demande ce qu'ils ont bien pu optimiser pour faire passer la taille de la librairie de 26 Mo à 1 Go
    Dans ce fichier, il y a tout ce qui est nécessaire pour effectuer l'édition des liens... avec un exécutable ou une bibliothèque dynamique. Dans une bibliothèque statique, il n'y a en réalité aucune édition des liens d'effectuée.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Compiler une base de données
    Par ramanov dans le forum Bases de données
    Réponses: 1
    Dernier message: 13/02/2008, 21h57
  2. Compilation WLANAPI (msxml6.lib)
    Par BVCDX dans le forum Windows
    Réponses: 2
    Dernier message: 12/04/2007, 18h29
  3. Réponses: 6
    Dernier message: 28/03/2007, 19h40
  4. Compilation avec une lib partagée
    Par GLDavid dans le forum Linux
    Réponses: 3
    Dernier message: 26/07/2006, 15h13
  5. [Tomcat]Compiler avec les libs
    Par javaSudOuest dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 09/09/2005, 20h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo