Compiler une librairie C
UniX
Membre
Salut à tous.
Je suis en train de me pencher sur un sujet qui consiste à intégrer une librairie C dans un projet Cocoa.
Un exemple, une librairie pour faire des TIFF : libtiff.
Si j'ai bien tout compri en lisant pas mal de sujets, la première étape est de compiler la librairie, puis l'ajouter dans le projet Xcode, et enfin déclarer le .h et faire des appels aux méthodes.
Je bute déjà sur la première étape, comment compiler la librairie ? J'ai lu que ça se passait avec une ligne de commande, mais je n'ai pas réussi à trouver la syntaxe ...
Je suis en train de me pencher sur un sujet qui consiste à intégrer une librairie C dans un projet Cocoa.
Un exemple, une librairie pour faire des TIFF : libtiff.
Si j'ai bien tout compri en lisant pas mal de sujets, la première étape est de compiler la librairie, puis l'ajouter dans le projet Xcode, et enfin déclarer le .h et faire des appels aux méthodes.
Je bute déjà sur la première étape, comment compiler la librairie ? J'ai lu que ça se passait avec une ligne de commande, mais je n'ai pas réussi à trouver la syntaxe ...
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
make
Y a sans doute des options avec ./configure pour obtenir une bibliothèque statique.
J'ai donc plusieurs fichiers qui ont été placés dans /usr/local/
J'ai :
- libtiff.dylib
- libtiff.a
- libtiff.la
- libtiffxx.dylib
- libtiffxx.a
- libtiffxx.la
Bon, donc là , j'ai compilé la librairie.
Maintenant, il faut l'importer dans le projet Xcode. Il faut importer quel fichier ? J'imagine qu'il n'y en a qu'un d'important. Et il faut l'ajouter dans Resources ?
Tu peux également les copier dans les ressources de ton appli et les utiliser comme ça.
Mais le mieux c'est quand même d'utiliser les .a (bibliothèques statiques) ; ça sera intégré dans ton exécutable comme ça...
Les .la, je ne sais pas trop ce que c'est...
Sinon, "libtiff", c'est la standard ; "libtiffxx", j'imagine que c'est une "improved" plus lourde ?
Je me suis amusé à compiler deux autres librairies, et effectivement, le fichier qui est crée à chaque fois, c'est le .a
Donc, j'ai ma librairie statique que j'importe dans Xcode. Je l'ai ajoutée, en choisissant Add existing files du menu contextuel de Resources. Ma librairie apparait donc avec son icone de caisse à outils ...
Et maintenant, j'ai fini ?
Et au niveau du code, j'ai quoi à faire ? Un #import quelque part ... ?
Il faut que tu importes le .h dans le projet aussi quand même...
Merci pour ta patience ....
J'ai un fichier fichier.c qui contient une seule méthode, un main(), et qui effectue tout un tas d'opération, en faisant appel à des méthodes de la librairie récemment importée.
Comment faire pour lancer l'exécution de ce main() depuis une méthode Cocoa ?
Euh... En mettant dans la méthode Cocoa le contenu du main...
J'étais parti pour le faire, et puis je me suis dit qu'il devait y avoir une façon de faire plus correcte.
Bon, ben on va faire ça ....!
Mais le compilo me met un warning comme quoi c'est pas le type attendu. J'ai pas employé la bonne méthode ?
Malgrès tout, ça à l'air de fonctionner.
Si tu veux éliminer ce message sans conséquence, caste !
.
"UTF8String" te renvoie un "const char*" que tu donnes à "bsb_open_header" qui prend un "char*" (il est donc susceptible de le modifier ! Un oubli du programmeur je pense, car en général ces fonctions prennent du "const")...
-> (char*)[cheminCarte UTF8String]
Je resors un peu ce sujet pour un complément.
Lorsque j'ai compilé la librairie, les paramètres définis étaient ceux pour ma machine (Intel). Du coup la librairie n'est pas Universal Binaries ....
Comment faut-il s'y prendre pour crééer une version UB ?
J'ai trouvé une note technique d'Apple qui traite du sujet, mais j'avoue ne pas avoir tout compris ...
Lien
Ensuite, pour créer de l'UB, il faut compiler une fois avec -ppc, une autre avec -i386, et ensuite assembler les deux exécutables avec lipo...
Je crois qu'on peut le faire en une étape avec -ppc et -i386 d'un coup, mais pas sûr.
Le problème c'est que je ne sais pas trop comment le mettre en oeuvre ....
Pour la version i386, je l'ai puisque c'est celle que j'ai obtenu en suivant tes conseils. Pour la PPC, comment la faire ?
Et lipo ?
Pour "lipo" -> man lipo
Pour construire la version i386, je n'ai fait que :
./configure
make
make install
Je le trouve ou le $CFLAGS à modifier ?
Je viens de passer tout les fichiers de configuration de la bibliothèque, et je n'ai rien trouvé de concluant, en tout cas pas quelquechose du style "-arch i386" ou "-arch ppc" ....
Il faut que je fasse quoi comme commande ?
$CFLAGS="-arch ppc" ?
Dans la note technique d'Apple, ils mettent :
CFLAGS="-O -g -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
LDFLAGS="-arch i386 -arch ppc"
./configure --prefix=${HOME}/Hello --disable-dependency-tracking