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 :

[.a or .so] - librairie statique ou partagée ?


Sujet :

C++

  1. #1
    Membre éclairé Avatar de jacquesh
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 269
    Par défaut [.a or .so] - librairie statique ou partagée ?
    bonjour a tous !!

    je souhaiterai avoir votre avis sur le sujet
    "librairie statique ou partagé"

    comment faire pour choisir ? les +, les - de chacun. possibilité de portage, ...

    merci d'avance.

  2. #2
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    ça dépend de beaucoup de choses...

    une librairie statique ça veut dire rien à distribuer avec le programme finale, mais aussi tout le programme à modifier en cas de mise à jour de la librairie.

    une librairie dynamique ça veut dire qu'il faut la distribuer avec le programme finale, pas vraiment problématique pour des programmes avec installateurs, mais si on met à jour les fonctions interne de la librairie (la partie compilée sans toucher à son interface), on n'a que la librairie à redistribuer.

    ensuite les choix sont nombreux, sur un plan général, c'est assez difficile à organiser, une librairie statique peut permettre d'optimiser le code exécutable généré par le compilateur dans certains cas... Une librairie dynamique permet de distribuer des exécutables plus petits utilisant tous une même librairie.

    C'est un sujet très complexe, et dans un contexte totalement général, je pense que les deux se valent.
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  3. #3
    Membre éclairé Avatar de jacquesh
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 269
    Par défaut
    ok, merci

    en ce qui concerne l'appel de ces librairies je ne trouve que de la doc pour le C avec 'dlopen() ...' en ce qui concerne le C++ existe t il d'autre moyen ou en général on continu a utilisé ce dlopen() ?

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    en ce qui concerne l'appel de ces librairies je ne trouve que de la doc pour le C avec 'dlopen() ...' en ce qui concerne le C++ existe t il d'autre moyen ou en général on continu a utilisé ce dlopen() ?
    dlopen et ses équivalents non-Linux sont toujours utilisés en C++ : il s'agit d'appels système propres à l'OS n'ayant pas grand chose à voir avec le langage.

    Mais en général, on n'utilise le chargement explicite de bibliothèques dynamiques que rarement (système de plugin, etc...).

    Ca pourrait nous aider si tu nous disais quel genre de bibliothèque tu veux développer.

  5. #5
    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 : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Les bibliothèques statiques ont aussi un inconvénient : seules les fonctions appelées par le programme seront conservées, et ça s'applique à certaines variables globales qui se chargent automatiquement - chargées d'initialiser qqch par exemple - qui peuvent donc ne plus "fonctionner"

  6. #6
    Membre éclairé Avatar de jacquesh
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 269
    Par défaut
    Citation Envoyé par Laurent Gomila
    Ca pourrait nous aider si tu nous disais quel genre de bibliothèque tu veux développer.
    je souhaiterai écrire l'implementation de la RFC 977 (NNTP) en C++ (full objet) ; j'ai beau chercher... j'en ai pas trouvé ?? et j'en ai besoin pour un p'tit projet genre Klibido mais pour gnome 2.

  7. #7
    Membre éclairé Avatar de jacquesh
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 269
    Par défaut
    ... sinon quelqu'un a une petite doc sur la facon d'utiliser (les méthodes d'appels, ...) les lib quelle soit static ou partagée dans un code C++ (donc sans utilisé dlopen())

  8. #8
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par Laurent Gomila
    dlopen et ses équivalents non-Linux sont toujours utilisés en C++ : il s'agit d'appels système propres à l'OS n'ayant pas grand chose à voir avec le langage.

    Mais en général, on n'utilise le chargement explicite de bibliothèques dynamiques que rarement (système de plugin, etc...).

    Ca pourrait nous aider si tu nous disais quel genre de bibliothèque tu veux développer.
    La Glib propose une alternative portable (Windows - Linux pour ce que j'en sais) pour le chargement d'une lib dynamique !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  9. #9
    Membre éclairé Avatar de jacquesh
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 269
    Par défaut
    Citation Envoyé par Franck.H
    La Glib propose une alternative portable (Windows - Linux pour ce que j'en sais) pour le chargement d'une lib dynamique !

    tu fait allusion a ?

  10. #10
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par jacquesh
    tu fait allusion a ?
    Oui
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  11. #11
    Membre éclairé Avatar de jacquesh
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 269
    Par défaut
    merci !!

    ben c ok.. on va faire avec ca... c'est ce qui a l'air d'être le plus portable.

  12. #12
    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 : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par jacquesh
    ... sinon quelqu'un a une petite doc sur la facon d'utiliser (les méthodes d'appels, ...) les lib quelle soit static ou partagée dans un code C++ (donc sans utilisé dlopen())
    Tu inclus le fichier .h des fonctions que tu veux inclure et tu lies avec le fichier .lib/.a de la bibliothèque - pour les bbilothèques dynamiques, il y a un fichier .lib/.a qui contient les fonctions exportées -

  13. #13
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    La Glib propose une alternative portable (Windows - Linux pour ce que j'en sais) pour le chargement d'une lib dynamique !
    En même temps, quelque soit l'OS (Window, Linux, MacOS), il n'y a qu'un type et 3 noms de fonction à changer, tout le reste est pareil. C'est l'histoire de 10 minutes à coder.

    Mais bon, as-tu vraiment besoin du chargement explicite pour ta bibliothèque ?

    Tu ferais mieux de te pencher sur la question suivante :

    ... sinon quelqu'un a une petite doc sur la facon d'utiliser (les méthodes d'appels, ...) les lib quelle soit static ou partagée dans un code C++ (donc sans utilisé dlopen())
    Bibliothèque statique : rien à faire si ce n'est de lier avec le fichier bibliothèque.
    Bibliothèque dynamique : selon le compilo il faudra précéder les symboles que tu voudras exporter / importer d'une directive spécifique (et lier avec le fichier d'importation).

  14. #14
    Membre éclairé Avatar de jacquesh
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 269
    Par défaut
    Citation Envoyé par Miles
    Tu inclus le fichier .h des fonctions que tu veux inclure et tu lies avec le fichier .lib/.a de la bibliothèque - pour les bbilothèques dynamiques, il y a un fichier .lib/.a qui contient les fonctions exportées -

    on ne peut pas utilisé les .so sans les .h ??

  15. #15
    Membre éclairé Avatar de jacquesh
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 269
    Par défaut
    Citation Envoyé par Laurent Gomila
    En même temps, quelque soit l'OS (Window, Linux, MacOS), il n'y a qu'un type et 3 noms de fonction à changer, tout le reste est pareil. C'est l'histoire de 10 minutes à coder.

    Mais bon, as-tu vraiment besoin du chargement explicite pour ta bibliothèque ?

    Tu ferais mieux de te pencher sur la question suivante :


    Bibliothèque statique : rien à faire si ce n'est de lier avec le fichier bibliothèque.
    Bibliothèque dynamique : selon le compilo il faudra précéder les symboles que tu voudras exporter / importer d'une directive spécifique (et lier avec le fichier d'importation).
    j'utilise g++.
    sinon pour les lib dynamiques un simple export LD_LIBRARY_PATH avec les chemins de ma lib en valeur devrai suffir non ? parce que

    précéder les symboles que tu voudras exporter / importer d'une directive spécifique
    je ne suis pas sur de maitriser... en très explicite ce veut dire quoi.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    En très explicite, ça fait référence à ce que te génère Visual quand tu demandes un projet DLL.
    Les déclarations de fonctions/variables avec l'attribut __declspec(dllexport) et __declspec(dllimport) (mis dans une macro pour pouvoir passer facilement de l'un à l'autre); l'alternative étant les "module-definition files" de Visual

    Mais pour des compilos comme GCC et des plateformes unixoïdes, je ne sais pas ce qu'il faut.
    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.

  17. #17
    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 : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    GCC n'a pas besoin de cela par défaut

    Pour les bibliothèques dynamiques, il faut aussi les .h pour savoir ce qu'on utilise.

  18. #18
    Membre éclairé Avatar de jacquesh
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 269
    Par défaut
    oki merci a vous tous !!

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Miles : Alors, comment GCC sait ce que tu veux exporter ou non? (À supposer qu'on puisse choisir, bien sûr...)
    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.

  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 : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Par défaut il exporte tout. Pour le reste, je ne sais pas

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

Discussions similaires

  1. Librairie partagée versus librairie statique ?
    Par Luke spywoker dans le forum Débuter
    Réponses: 6
    Dernier message: 05/02/2015, 03h26
  2. Librairie partagé VS librairie statique
    Par Madmac dans le forum Linux
    Réponses: 4
    Dernier message: 03/02/2006, 21h09
  3. Réponses: 5
    Dernier message: 22/12/2005, 17h31
  4. Réponses: 2
    Dernier message: 19/08/2005, 16h02
  5. librairie statique/dynamique
    Par trop_wizz dans le forum MFC
    Réponses: 4
    Dernier message: 11/04/2005, 10h04

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