Dynamic Library et Objective C
zelegolas
Membre
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.
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.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Je vue ce qu'est un framework sous mac mais c'est pas cela que je recherche.
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
et
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