lib shared, optim facon static ? - C++ - Programmation
Marsh Posté le 23-02-2010 à 10:13:16
Salut,
Pour moi, l'avantage d'une bibliothèque dynamique c'est que plusieurs exe l'utilisent. Elle est dans un path et contient les fonctions utilisées par plusieurs programmes. Donc oui, la taille est importante mais au final si on la divise par le nombre de programmes qui l'utilisent cela devient ridicule. Donc ton optimisation n'aurait pas lieu d'être.
Cela pose en effet problème si peu de programmes utilisent la bibliothèque...
Marsh Posté le 23-02-2010 à 10:22:40
Parole tres sage. Et je le sais bien.
Le probleme c'est effectivement quand peu de programmes l'utilisent.
En fait, peu de fournisseur de logiciels prennent le risque d'installer des dll (windows) dans windows/ blabla .
Car souvent, on fourni des libs tres rares et tres specifiques à son application, on fait le choix des dll pour avoir des elements telechargeables séparemment, interchangeables et partageable en plusieurs de ses propres exe... on ne pense bien souvent pas du tout aux autres applications qui pourraient en avoir besoin.
preuve en est, les tres célèbre lib MSVCR80.DLL (et autres versions) sont présentent dans bon nombre d'applications (meme si fournir les dll n'est pas la technique recommandée par Microsoft). Pourtant, je peux parier trouver au moins 5 soft qui l'utilisent sur chacun de vos PC... alors pourquoi ne pas l'installer pour tous ???
Et bien parce qu'on veut s'assurer de fournir la bonne version, celle qu'on certifie !!!!
Et comme elle est sur mesure, alors on cherche à la rendre encore plus sur mesure... c'est pour ca que je cherche à en réduire la taille en plus !!!!
Marsh Posté le 23-02-2010 à 10:39:18
[avis perso]
Si elle est sur mesure autant la mettre en statique.
[/avis perso]
[troll]
Le jour ou microsoft fera quelque chose de propre...
[/troll]
Blagues à part, je n'ai pas de solution pour réduire la taille, à part la recompiler en supprimant à la main les choses inutiles. Peut-être en effet qu'il y a un outil pour ça mais je ne le connais pas.
Marsh Posté le 02-03-2011 à 12:01:24
Je suis toujours en recherche d'un outils qui permettrait d'épurer une lib dynamique de tous les éléments inutilisés par telle ou telle executable.
EPURER( dll, exe) => dll amaigrie.
Marsh Posté le 23-02-2010 à 09:32:05
Bonjour,
On oppose souvent l'usage de lib static (buildé dans l'exe) aux lib dynamiques (placées à coté de l'exe ou dans un PATH).
Et quand il s'agit de gagner de la place sur l'ensemble de l'application, on précaunise l'usage de lib static.
Grace aux options adaptées (Eliminate Unrefered Data sous windows, ou l'equivalent linux), les classes et méthodes inutilisées sont retirées du binaire final. Cela permet de gagner de l'espace.
(en gros si vous utilisez uniquement ADD dans une lib de maths, alors SUB, DIV, et MULT seront tout simplement retirées, gagnant ainsi 3/4 de la taille totale)
Par contre, quand on utilise des lib dynamiques (ou partagées ou dll ou shared), celles ci sont déposées à coté de votre Exe telles quelles ! Identiques au moment où elles ont été compilées (par vous ou par le fournisseur des libs). Elles ont donc une taille fixée et non réductible (taille ne dépendant que des optim à leur compilation)
Ce que j'aimerai savoir, c'est s'il existe un moyen pour utiliser des shared libs, mais en ayant effectué la passe de "simplification" qui aurait été faite lors d'un link static ???
(En gros, je compile mon Exe, et une moulinette retire les symboles inutilisés au fur et à mesure dans les dll qui sont à coté)
Voilà... des idées ?
Message édité par NounouRs le 23-02-2010 à 10:09:26