Dynamic Library et Objective C

zelegolaszelegolas Membre
13:47 modifié dans API AppKit #1
Bonjour

Je suis en train de me familiariser avec Mac OSX et XCode 3.1. J'aimerai comprendre comment on cree une librairie dynamique qui soit ensuite appele par mon programme principale. Le tout en Objective C.

Je cherche une sorte de tutorial assez precis sur le sujet que je puisse tester. Ce que j'ai pu trouver sur le Net m'a semble confu et pas tres claire.

Merci de votre assistance.

Réponses

  • Philippe49Philippe49 Membre
    13:47 modifié #2
    Le mot clé est framework
  • zelegolaszelegolas Membre
    13:47 modifié #3
    dans 1223051892:

    Le mot clé est framework


    Je vue ce qu'est un framework sous mac mais c'est pas cela que je recherche.
  • ChachaChacha Membre
    avril 2010 modifié #5
    Salut zelegolas.
    Il faudra nous expliquer pourquoi tu ne veux pas d'un framework !

    Sans trop de précisions, je vais juste te donner un petit exemple en ligne de commande, histoire de bien comprendre le minimum nécessaire.

    Soient les fichiers

    <br />//main.c<br />extern void f(void);<br /><br />int main()<br />{<br />&nbsp; f();<br />&nbsp; return 0;<br />}<br />
    


    et

    <br />//bibliotheque.c<br /><br />#include &lt;stdio.h&gt;<br /><br />void f(void)<br />{<br />&nbsp; printf(&quot;f()&#092;n&quot;);<br />}<br /><br />
    


    Pour compiler/linker, voici une liste d'opérations :
    gcc -c bibliotheque.c //compile, crée bibliotheque.o
    gcc -dynamiclib -o bibliotheque.dylib bibliotheque.o //crée biblotheque.dylib à  partir du .o
    gcc -c main.c //compile main.c
    gcc -o prgm main.o bibliotheque.dylib //assemble le tout dans un exécutable prgm

    Par la suite, remplacer bibliotheque.dylib peut se faire sans toucher à  main ni à  prgm

    Maintenant, il faut savoir qu'une bibliothèque dynamique est destinée à  être déployée, soit dans un chemin absolu, soit dans un chemin relatif à  un autre programme qui l'utilise (et c'est aussi pour ça que l'empaqueter dans un framework, c'est bien). Il faut donc jouer sur le install_name pour que les programmes "clients" sachent toujours où trouver la bibliothèque.
    Le "install_name" se règle à  la fois dans bibliotheque.dylib, mais aussi dans le client (ici main.o) au moment du linkage (souvent via l'option -Wl)

    Une fois que tu as compris tout ça, c'est facile avec XCode. Il y a un modèle de projet "dynamic library". Quasiment tous les paramètres sont réglés. Il faut cependant envisager de changer l'option "Dynamic Library Install name", qui est par défaut un chemin absolu vers /usr/local.

    Pour plus de renseignements vers les install_name relatifs (utilisant @executable_path, @loader_path ou @rpath), je te redirige vers un autre post : http://forum.pommedev.com/index.php?topic=2728.0

    Et enfin, quand tu utiliseras ta blibliothèque dynamique dans un autre projet, il faudra penser à  ces options de linkage. Avec un chemin absolu (beeerk!) il n'y aura rien à  faire. Avec un chemin relatif (mieux !), il faudra aussi penser à  copier la bibliothèque dans les ressources de l'application client.

    Voilà , ça fait beaucoup, mais sans plus de précisions, il n'est pas facile de deviner qu'est-ce que tu veux faire et où se situent tes problèmes.
    (et pourquoi diable tu ne veux pas d'un framework :-D)

    +
    Chacha
Connectez-vous ou Inscrivez-vous pour répondre.