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

VC++ .NET Discussion :

Lib statique avec dépendances dynamiques


Sujet :

VC++ .NET

  1. #1
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Points : 1 179
    Points
    1 179
    Par défaut Lib statique avec dépendances dynamiques
    Bonjour,

    Voilà mon petit soucis :

    J'utilise une bibliotheque dynamiquement (.dll) pour mon projet.
    J'ai besoin de sortir un peu de code de mon projet pour en faire une lib réutilisable par d'autres projets.

    Donc c'est là où vient le mais :

    Lorsque que je compile mon bout de code en lib statique (pour éviter une dll de plus), le .lib est enorme (22Mo en release) alors qu'il y a a peine quelques milliers de lignes de code...
    Ce que je souhaite savoir c'est :
    1. est ce que c'est possible de compiler une lib statique qui a des dépendances dynamiques ? (je ne veux pas que le code des dépendances dynamique soit inclu dans mon .lib)
    2. si oui, comment ?

    Merci.

    Ange_blond
    "le langage C permet de tout faire, y compris se tirer dans le pied. Le langage C++ permet de tout faire, y compris se tirer dans le pied - et réutiliser la balle"

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Une librairie statique n'est absolument pas liée, ni de près, ni de loin : aucune dépendance n'est résolue, c'est l'exécutable utilisateur (EXE ou DLL) qui effectuera la liaison directe. Par contre, elle subit bien sûr l'inlining et autres formes d'optimisation pouvant modifier plus ou moins fortement la taille du code produit.
    A noter que la taille du .LIB n'est pas forcément très significative, à cause des informations de debug et des fonctions "inutiles" qui ne seront pas forcément liées à l'exécutable si tu actives le link au niveau fonction.

    Tu peux t'en convaincre sur la page des propriétés d'une librairie statique : il n'y a PAS de section "Édition de liens"...
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  3. #3
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Points : 1 179
    Points
    1 179
    Par défaut
    D'accord, donc ma lib ne va pas chercher à inclure les dépendances de la bibliotheque que j'utilise pour mon projet...

    Par contre je comprend vraiment pas comment je m'en sort avec 22Mo pour les quelques classes qu'il y a...
    Le soucis étant que plusieurs projet vont utiliser statiquement cette lib, et donc ils vont tous "prendre" 22Mo alors que rares sont ceux qui dépassent le Mo ...

    Les options de compil sont en effet réduites, mais peut etre que je rate une étape en cours de route ... ?
    "le langage C permet de tout faire, y compris se tirer dans le pied. Le langage C++ permet de tout faire, y compris se tirer dans le pied - et réutiliser la balle"

  4. #4
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par Ange_blond Voir le message
    D'accord, donc ma lib ne va pas chercher à inclure les dépendances de la bibliotheque que j'utilise pour mon projet...
    Non, en effet, c'est une DLL qui ferait ça. Mais tu auras bien sûr besoin des entêtes pour compiler la librairie, bien sûr.
    Tu peux (partiellement) inclure les dépendances via un "#pragma comment(lib)", mais ça ne te dispensera pas d'avoir les librairies de dépendances sous le coude pour créer un exécutable ou une DLL utilisant ta librairie statique.

    Citation Envoyé par Ange_blond Voir le message
    Par contre je comprend vraiment pas comment je m'en sort avec 22Mo pour les quelques classes qu'il y a...
    Le soucis étant que plusieurs projet vont utiliser statiquement cette lib, et donc ils vont tous "prendre" 22Mo alors que rares sont ceux qui dépassent le Mo ...
    C'est bien le problème avec les librairies statiques, justement !
    Essaie quand même de linker un exécutable de test : tu as peut-être beaucoup d'informations de debug dedans, ce qui produira un exécutable assez petit, ou alors, tu as vraiment trop abusé des templates.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  5. #5
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Points : 1 179
    Points
    1 179
    Par défaut
    Merci

    Je vais qd meme tenter à l'occasion un exe de test en effet pour voir s'il embarque pas plus de dépendances qu'il ne faut...

    Par contre c pas logique : 22Mo en Release, 8Mo en debug....

    Et le truc qui tue : sous linux, la lib en static ou en dynamic ne dépasse pas les quelques centaines de Ko tout au plus. (fait avec NetBeans)
    "le langage C permet de tout faire, y compris se tirer dans le pied. Le langage C++ permet de tout faire, y compris se tirer dans le pied - et réutiliser la balle"

  6. #6
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par Ange_blond Voir le message
    Par contre c pas logique : 22Mo en Release, 8Mo en debug....
    Tu noteras, dans les optimisations, que certaines optimisations de vitesse sont diplomatiquement marquées comme "pouvant augmenter la taille de l'exécutable" (au profit de la vitesse d'exécution, donc).

    C'est une des raisons pour laquelle je me méfie toujours des templates utilisés n'importe comment et/ou n'importe où...
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    J'ai déjà vu Visual me détecter une fonction de calcul d'un tableau de 16Mo et me remplacer cette fonction par une copie du tableau directement dans l'exécutable produit.
    Désactiver l'inlining sur l'unité de compilation concernée (c'était Visual 6, pas de LTCG à l'époque) a résolu le problème.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Réponses: 9
    Dernier message: 01/04/2012, 04h44
  2. Créer une lib dynamique avec des lib statiques
    Par skeleton18 dans le forum C
    Réponses: 3
    Dernier message: 11/06/2011, 12h05
  3. "lib statique" vs "lib dynamique" vs "objet COM"
    Par ram-0000 dans le forum Windows
    Réponses: 3
    Dernier message: 13/01/2009, 13h27
  4. ComboBox avec données dynamiques ET statiques ?
    Par kaptnkill dans le forum VBA Access
    Réponses: 2
    Dernier message: 31/07/2008, 16h06
  5. Convertir une lib dynamique à une lib statique
    Par Sceener dans le forum Autres
    Réponses: 2
    Dernier message: 11/07/2007, 20h22

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