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.
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.
ç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)
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() ?
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.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() ?
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.
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
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"
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.Envoyé par Laurent Gomila
... 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())
La Glib propose une alternative portable (Windows - Linux pour ce que j'en sais) pour le chargement d'une lib dynamique !Envoyé par Laurent Gomila
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 !
Envoyé par Franck.H
tu fait allusion a?
Code : Sélectionner tout - Visualiser dans une fenêtre à part g_module_open()
OuiEnvoyé par jacquesh
![]()
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 !
merci !!
ben c ok.. on va faire avec ca... c'est ce qui a l'air d'être le plus portable.![]()
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 -Envoyé par jacquesh
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.La Glib propose une alternative portable (Windows - Linux pour ce que j'en sais) pour le chargement d'une lib dynamique !
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.... 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 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).
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
Envoyé par Miles
on ne peut pas utilisé les .so sans les .h ??
j'utilise g++.Envoyé par Laurent Gomila
sinon pour les lib dynamiques un simple export LD_LIBRARY_PATH avec les chemins de ma lib en valeur devrai suffir non ? parce que
je ne suis pas sur de maitriser...précéder les symboles que tu voudras exporter / importer d'une directive spécifiqueen très explicite ce veut dire quoi.
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.
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.
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.
Par défaut il exporte tout. Pour le reste, je ne sais pas![]()
Partager