Bonjour,
J'ai une bibliothèque qui tourne sous linux, la taille de ces objets fait environs 105Mo, je dois porter cette bibliothèque sous windows, mais le problème que je rencontre est que la taille de ces objets fait 2,5Go du coup lors du linkage, j'ai une erreur de mémoire insuffisante.
Au moment de la compilation le compilateur de Visual a ralé car il lui faut l'option de compilation "-bigobj" pour augmenter la nombre de section des fichiers obj.
Ma question est la suivante, est ce que vous savez s'il est normal d'avoir une taille de fichiers obj aussi importante ? Et s'il est possible de réduire cette taille avec des options de compilation ?
Pour info voici les options de compilation que je passe au compilateur et au linkeur :
CXXFLAGS = -bigobj -nologo -Zm200 -Zc:wchar_t- -O2 -MD -EHsc -GR -W3 -w34100 -w34189 $(DEFINES)
LFLAGS = /LIBPATH:"e:\compilateur\Qt\4.5.2\lib" /NOLOGO /INCREMENTAL:NO /DLL /MANIFEST /MANIFESTFILE:"release\libIsograyData.intermediate.manifest" /IGNOREIDL
J'utilise Qt4 et son qmake.
Merci de vos réponses.
Cordialement.
Forum Programmation.c++ Problème de taille des objets
25
août
2009
# dur, dur
Posté par lem__mel . Évalué à 6.
Pour satisfaire ma curiosité, comment tu peux obtenir 105Mo de fichier objet sous linux ? Le projet est-il si gros que ca ?
Je suppose que tu n'as pas le contrôle sur le code, alors tu peux vérifier si ton programme n'embarquerait pas également des ressources (images, ou autre) qui pourraient être chargés autrement et plus tard.
[^] # Re: dur, dur
Posté par richou . Évalué à 1.
Oui le projet est vraiment gros (environs 1350 fichiers sources).
[^] # Re: dur, dur
Posté par lem__mel . Évalué à 2.
Mouais, cela dépend réellement de comment c'est fait, par exemple :
- fichiers générés automatiquement donnant de très petits fichiers
- inclusions de librairies annexes afin d'être sûr que le projet compile toujours
- des codes frankenstein : ca pousse dans tous les sens, on a peur d'enlever quoique ce soit, etc
Je viens de jouer un peu avec les sources de chrome (i.e. j'ai retiré les images, les outils, bref une petit partie de ce qui ne fait pas chrome) et j'arrive à la taille de 63Mo de sources.
Ton projet fait quelle taille ?
[^] # Re: dur, dur
Posté par richou . Évalué à 1.
[^] # Re: dur, dur
Posté par lem__mel . Évalué à 4.
Le binaire sous Linux il fait quelle taille à la fin[3] ? T'as vérifié qu'il n'y a pas de ressources embarquées [3] ? Pas possible de découper le projet (i.e. en plusieurs librairies) ?
[1] :-P, une déduction peut-être erronée, qui s'appuie sur les faits suivants :
- création d'un compte pour poser une question
- question posée aux mauvais interlocuteurs (plutôt sur MSDN)
[2] parce qu'il va en avoir un paquet de problèmes :-P
[3] je frémis à l'idée de la taille d'un binaire sous Windows (en Giga, non !?!)
[4] il fut un temps où Qt ne permettait "simplement" d'externaliser les ressources, maintenant cela a été changé : http://doc.trolltech.com/4.5/resources.html
[^] # Re: dur, dur
Posté par benoar . Évalué à 3.
[^] # Re: dur, dur
Posté par Kerro . Évalué à 2.
Facile: il n'y a aucun commentaires, et les noms de fonctions et de variables n'ont que 3 lettres.
Bon, même comme ça, je doute que ça fasse trois fois :-)
[^] # Re: dur, dur
Posté par Axioplase ıɥs∀ (site web personnel) . Évalué à 2.
Si tu relisais K&R, tu saurais que c'est 3 variables d'une lettre…
[^] # Re: dur, dur
Posté par richou . Évalué à 1.
Il n'y a pas de fichier généré, ce n'est que du fait main :)
Frankenstein est passé à une époque, il a laissé du Fortran derrière lui mais ca c'est une autre lib, une autre histoire ....
Il n'y a aucune ressource genre image ...
Et j'ai décidé de poster chez vous vu l'incompétence des gens sur le forum msdn, vous êtes les meilleurs et les plus forts, voila le pourquoi du comment, je m'autoflagèle à venir parler windows ici.
Par contre pour la piste des template à gogo, c'est peut etre mon cas, est-ce que vous pouvez développez un peu s'il vous plait.
Merci beaucoup pour ces réponses.
[^] # Re: dur, dur
Posté par liberforce (site web personnel) . Évalué à 4.
[^] # Re: dur, dur
Posté par benoar . Évalué à 2.
Sous Windows, il y avait aussi le problème que chaque template, pour chaque type, doit être instanciée pour _chaque unité de compilation_ (chaque fichier, quoi). Ce qui commence à multiplier beaucoup les templates. Bon, normalement, le linker doit savoir éliminer les copies redondantes lors du link, mais peut-être que des fois il a du mal. À l'époque, je n'avais pas trouvé de solution simple pour régler ce problème, mais ça doit exister si on fait l'effort de se prendre un peu la tête (mais avec un projet aussi gros, j'ai peur que la complexité explose).
[^] # Re: dur, dur
Posté par benoar . Évalué à 3.
Et en fait ce n'est pas spécifique à Windows.
[^] # Re: dur, dur
Posté par lem__mel . Évalué à 1.
c'est comme tous les forums, cela dépend :
- des gens présents
- que les gens soient stimulés par tes questions ( c.f. http://www.gnurou.org/writing/smartquestionsfr )
vous êtes les meilleurs et les plus forts,
la flatterie ne sert pas forcément mais ca touche toujours un peu :-) ( c.f. http://www.gnurou.org/writing/smartquestionsfr )
Donc si je comprends bien, tu as une librairie qui lorsqu'elle est en générée, produit 105Mo de fichier objets sous linux ?
Et la taille du code source pour cette librairie spécifiquement est de combien ? La librairie à la fin, elle fait quelle taille ?
[^] # Re: dur, dur
Posté par richou . Évalué à 1.
Donc si je comprends bien, tu as une librairie qui lorsqu'elle est en générée, produit 105Mo de fichier objets sous linux ?
Et la taille du code source pour cette librairie spécifiquement est de combien ? La librairie à la fin, elle fait quelle taille ?
Oui c'est ça.
27.5Mo et 35Mo.
[^] # Re: dur, dur
Posté par lem__mel . Évalué à 2.
ce me chiffone tout de même une librairie faisant 35 Mo (il faut ne pas oublier que dans une libraire les symboles externes -libc, etc- ne sont pas inclus).
Quelques points de comparaison (librairies en 'release') :
- noyau linux + modules = 56 Mo (il s'agit là du noyau de la debian, noyau généraliste),
- Qt complet (même avec Webkit) en = 43 Mo (Qt sans la lib webkit = 28Mo),
En fait, j'ai rien trouvé sur mon système qui fasse une taille pareil. Tu confonderais pas avec la version avec symboles pour le débuggage ?
[/ca va pas t'aider]
Pour t'aider, si jamais il n'y a pas de problèmes avec ta librairie et que tu peux pas t'en sortir avec les flags qui vont bien, alors il ne te reste plus qu'à la découper en plusieurs sous-librairies différentes (évidemment, il te faut de l'aide pour faire un découpage sémantique de cette librairie, de l'aide du responsable projet, etc). Fais-le d'abord sous linux (pour bien tout valider), puis pour passe à windows (tu peux jeter un œil là dessus : http://www.boost.org/development/separate_compilation.html).
Bon courage.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.