Librairie dynamique en C++

FloFlo Membre
22:35 modifié dans Actualités #1
Bonjour à  tous,

dans le cadre d'un projet je cherche le moyen d'utiliser xcode pour créer une librairie dynamique en C++ pour implémenter un système de plugin.

Je souhaite me détacher un maximum des frameworks d'apple pour rester le plus portable possible (pas de bundle etc...). J'ai vu que sous XCode il y avait deux types de projets, "C++ Dynamic Library" et "C++ Standard Dynamic Library".

Quelqu'un pourrait-il m'expliquer en quoi consiste la différence?
Sinon je suis preneur de tous bout de code/ tutos / exemples sur le sujet.
(vu que je n'y connais pas grand chose en C++)

Merci d'avance pour vos réponses  :)

Réponses

  • MalaMala Membre, Modérateur
    22:35 modifié #2
    Le premier utilise un projet Xcode classique alors que le second utilise des fichiers Xconfig pour la compilation d'où le terme "Standard".

    http://en.wikipedia.org/wiki/Xconfig
  • denis_13denis_13 Membre
    22:35 modifié #3
    Bonjour,
    la différence est assez simple, pour résumer, une librairie est un fichier contenant un ensemble de fichier .o qui correspondent au binaire de différentes fonctions. Au moment où tu lies ("link") un programme exécutable, si tu inclus des librairies statiques, les fonctions de ces librairies qui sont appelées dans ton programme seront extraites de ces librairies (en général on ne fait pas appel à  toutes les foncions d'une librairie) y compris leurs dépendances (les fonctions utilisées par les fonctions de ta librairie) et ajoutées au fichier exécutable de ton programme. Dans le cas d'une librairie dynamique, les fonctions sont simplement référencées et chargées en mémoire depuis la librairie (son chemin doit être connu de ton programme) au moment ou ton programme en a besoin. Si tu ne fait pas de bundle (le bundle est un dossier qui contient des ressources dont des librairies dynamiques), tu vas probablement utiliser des librairies dynamiques qui sont déjà  installées dans ton système (ou que tu vas installer dans un répertoire standard), si elles sont bougées et déplacées, ton programme ne fonctionnera plus. Pour qu'un programme reste le plus indépendant possible il est préférable d'utiliser des libraires statiques (mais l'exécutable sera plus volumineux, sur le disque est en mémoire).
    Voilà ...
  • FloFlo Membre
    septembre 2009 modifié #4
    Merci à  vous deux pour toutes ces explications !  :)

    En fait je souhaite permettre à  l'utilisateur de choisir à  l'exécution quelle librairie(faisant office de plugin) il souhaite utiliser... La contrainte étant que le programme principal ne doit pas être re-compilé à  chaque fois que l'on souhaite lui adjoindre un plugin.

    Je me posais la question, est-il possible de créer des .dylib sans se linker au  framework carbon ?

    Je vais essayer de chercher des exemples de chargement/utilisation de librairies dynamiques dans un programme "command line C++".  ;)

    Si vous en aviez ça serait super !  ;)

    [EDIT]Selon vous, est-il possible de développer des .dylib exploitable sous LINUX et MAC OS X ?
  • denis_13denis_13 Membre
    22:35 modifié #5
    non, pas besoin de se lier au frameworks carbone (sauf si tu voulais en utiliser des fonctions). Concernant la compatibilité des librairies, elles peuvent l'être au niveau source, mais pas exécutable...
    Pour les exemples je n'en ai pas sous la main, mais cela ne manque pas. En fait j'ai travaillé pendant 6 mois sur un projet multi-plateforme en C++ avec des experts C++, cela m'a simplement renforcé dans mon opinion que ce n'est pas la démarche que j'adopterais dans la plus part des cas (ceci dit j'ai découvert l'Objective-C en 1992, et je suis encore sous le charme, donc je commence à  avoir mes manies).
  • FloFlo Membre
    22:35 modifié #6
    Ok merci !  :)


    (ceci dit j'ai découvert l'Objective-C en 1992, et je suis encore sous le charme, donc je commence à  avoir mes manies)


    Je préfère également objective-c qui est bien plus propre mais malheureusement le C++ m'est imposé. Le système de dylib ne m'enchante pas non plus mais à  priori je n'est pas le choix...

    Le soft doit fonctionner sous LINUX et MAC OS X sinon c'est clair que je me serait servis d'objective-c et des bundles.

    En tous cas merci pour les réponses !  ;)

  • schlumschlum Membre
    22:35 modifié #7
    Le C++ n'est pas vraiment plus propre ou plus sale que l'Objective-C... J'ai appris avec l'expérience que la " propreté " dépend surtout de l'utilisation qu'on en fait  :) (je dirais même qu'on peut programmer très proprement en C++ et très salement avec l'Objective-C  ;D)
Connectez-vous ou Inscrivez-vous pour répondre.