N-PN White-Hat Project
[AIDE] Ajout d'une Lib en C - Version imprimable

+- N-PN White-Hat Project (https://n-pn.fr/forum)
+-- Forum : Programmation (https://n-pn.fr/forum/forumdisplay.php?fid=72)
+--- Forum : Langages compilés (https://n-pn.fr/forum/forumdisplay.php?fid=25)
+--- Sujet : [AIDE] Ajout d'une Lib en C (/showthread.php?tid=2687)



[AIDE] Ajout d'une Lib en C - sakiir - 11-02-2013

Salut , Salut,
Alors voila j'ai toujours eu un problème pour ajouter une bibliothèque en C..
Alors c'est simple j'aimerais une sorte de mini tuto pour savoir comment faire de A à Z , Ça serait vachement cool , étant donné qu'on ne trouve pas grand chose sur google.

Ps: Je vous garanti que ça en aiderai plus d'un ! hein InfamouzZ ? :p


RE: [AIDE] Ajout d'une Lib en C - Yttrium - 11-02-2013

Euh tu peux juste préciser ton OS et ton IDE ?
(Ubuntu Codeblocks != XP VS08)


RE: [AIDE] Ajout d'une Lib en C - sakiir - 12-02-2013

Je suis sur ubuntu , oui j'avais oublié de préciser !
Et je n'utilise pas d'ide
Nano + gcc


RE: [AIDE] Ajout d'une Lib en C - ark - 12-02-2013

Admettons que tu veuille linker avec la lib curl.

Pour cela, tu vas utiliser dans tes fichiers C des fonctions de cette lib. Il te faudra donc penser a inclure le fichier header correspondant. En l'occurrence : #include <curl/curl.h>

Ensuite, ta ligne de compilation avec gcc va etre de cette forme:
Code :
gcc source.c -o prog -lcurl

l'option -l permet de linker avec une lib deja présente sur ton système (dans le dossier /lib/ en théorie, mais ça dépends des distributions.)
Si tu as toi meme cree une lib, et que tu veux linker avec, il faudra que tu precise le chemin d'acces. Pour cela, il faut utiliser l'option -L de gcc (admettons pour l'exemple que ta lib s'appelle libmy.so):
Code :
gcc source.c -o prog -L . -lmy



RE: [AIDE] Ajout d'une Lib en C - sakiir - 12-02-2013

ok merci je vais voir si je peux le faire ! Smile

Admettons cette lib ? Comment je procède ?


RE: [AIDE] Ajout d'une Lib en C - InFamouZz - 13-02-2013

quelle librairie tu veut mettre sakir ?
#include <nom_libraire.h>


RE: [AIDE] Ajout d'une Lib en C - sakiir - 14-02-2013

je sais inclure une librairie dans mon fichier ..
Je ne sais pas l'installer sur la machine !
GTK par exemple
SDL
Curl

Etc ..


RE: [AIDE] Ajout d'une Lib en C - Sh4dows - 14-02-2013

Installation d'une lib :

Si tu veux installer par exemple ncurses sous Debian et ses dérivés :
Code :
apt-get install libncurses5-dev
Si tu ne connais pas le nom du paquet, le mieux est de visiter le site officiel (ex. SDL => hxxp://www.libsdl.org/) ou de Googler !
Ensuite j'ajoute mon header ncurses dans mes .c :
Code :
#include <ncurses.h>
Et je compile avec la lib :
Code :
gcc *.c -lncurses

Créer ta propre librairie :

Souvent on donne l'extension .a à une librairie.
Si tu veux par exemple compiler la tienne en .a il suffit de faire :
Code :
gcc -c file.c
// On passe de .c à .o

Code :
ar cr libperso.a file.o
// .o to .a

Code :
ranlib libperso.a
// RTFM Tongue


Ensuite tu link ta lib lors de la compilation, sans oublier l'inclusion d'un .h listant les fonctions de ta lib.a !!!
Code :
gcc *.c -L chemin/lib/exemple/ -lperso



RE: [AIDE] Ajout d'une Lib en C - sakiir - 14-02-2013

(14-02-2013, 01h40)Sh4dows a écrit : Installation d'une lib :

Si tu veux installer par exemple ncurses sous Debian et ses dérivés :
Code :
apt-get install libncurses5-dev
Si tu ne connais pas le nom du paquet, le mieux est de visiter le site officiel (ex. SDL => hxxp://www.libsdl.org/) ou de Googler !
Ensuite j'ajoute mon header ncurses dans mes .c :
Code :
#include <ncurses.h>
Et je compile avec la lib :
Code :
gcc *.c -lncurses

Créer ta propre librairie :

Souvent on donne l'extension .a à une librairie.
Si tu veux par exemple compiler la tienne en .a il suffit de faire :
Code :
gcc -c file.c
// On passe de .c à .o

Code :
ar cr libperso.a file.o
// .o to .a

Code :
ranlib libperso.a
// RTFM Tongue


Ensuite tu link ta lib lors de la compilation, sans oublier l'inclusion d'un .h listant les fonctions de ta lib.a !!!
Code :
gcc *.c -L chemin/lib/exemple/ -lperso

Je te remercie beaucoup !!!!
je comprends mieux !


RE: [AIDE] Ajout d'une Lib en C - oosfalte - 04-05-2013

Bonjour,
quand je récupère des bouts de code en C sur le net je galère moi aussi pour retrouver les paquets qui installeront les headers demandés.
J'ai trouvé une solution ici:
http://www.debianhelp.co.uk/findfile.htm

Donc on installe le paquet apt-file, on met à jour le cache 'apt-file update' et on cherche le header voulu (ou fichier quelconque), ce qui donne pour ncurses.h:

Code :
~ # apt-file search ncurses.h
doc-linux-ja-html: /usr/share/doc/HOWTO/ja-html/LFS-BOOK/appendixa/ncurses.html
doc-linux-ja-html: /usr/share/doc/HOWTO/ja-html/LFS-BOOK/chapter05/ncurses.html
doc-linux-ja-html: /usr/share/doc/HOWTO/ja-html/LFS-BOOK/chapter06/ncurses.html
ekg2-core: /usr/share/doc/ekg2-core/book-en/plugin-ncurses.html
ekg2-core: /usr/share/doc/ekg2-core/book-pl/plugin-ncurses.html
latrace: /etc/latrace.d/headers/ncurses.h
libghc-ncurses-doc: /usr/lib/ghc-doc/haddock/ncurses-0.2.1/ncurses.haddock
libncurses5-dev: /usr/include/ncurses.h
libncursesw5-dev: /usr/include/ncursesw/ncurses.h
php-doc: /usr/share/doc/php-doc/html/book.ncurses.html
php-doc: /usr/share/doc/php-doc/html/intro.ncurses.html
php-doc: /usr/share/doc/php-doc/html/ref.ncurses.html
~ #

Sinon connaissez vous un site qui fait le lien entre un fichier (header ou autre) et le paquet qui l'installe ?
ok il ya cà :http://packages.debian.org/ , autant pour moi


RE: [AIDE] Ajout d'une Lib en C - b0fh - 04-05-2013

Hello,

La procédure que Sh4dows décrit concerne les librairies statiques, ç.a.d celles qui sont copiées a l'intérieur du binaire final pendant la phase d'édition de liens (ld). ça donne des binaires qui marchent partout, mais qui sont très lourds, et avec cette manière le système se retrouve a stocker plusieurs dizaines, voire centaines de fois le même code dans des binaires différents.

Pour pallier à ce problème les systèmes récents utilisent des librairies dynamiques (.dll sous windows, .so sous unix). Pour gcc, lui passer l'option "-shared" (et plusieurs .o en argument) produira un fichier .so, qu'on va typiquement aller stocker dans /usr/lib ou /usr/local/lib. Pas besoin de passer par ar.

Quand la librairie est dynamique, c'est le programme ld.so qui est chargé de trouver les libs au moment de l'exécution. Par défaut il cherche dans les endroits configurés dans /etc/ld.so.conf (si tu modifies ce fichier, il faut lancer la commande ldconfig, le package manager le fait en général automatiquement quand il ajoute des libs a un nouvel endroit).

Sinon, pour faire le lien entre un fichier et le paquet qui l'installe, pour les distributions basée sur dpkg (que APT soit présent ou pas):

Code :
$ dpkg-query -L bash
/.
/bin
/bin/bash
/usr
/usr/bin
/usr/bin/clear_console
/usr/bin/bashbug
[...]
$ dpkg-query -S /usr/include/ctype.h
libc6-dev: /usr/include/ctype.h



RE: [AIDE] Ajout d'une Lib en C - oosfalte - 04-05-2013

@b0fh
merci j'ignorais l'histoire du ld.so.
Après vérif, en effet j'ai 2 fichiers dans mon /etc/ld.so.conf.d pour la configuration.
J'ai lu qu'on pouvait aussi modifier LD_LIBRARY_PATH.

Pour ce qui est de dpkg-query -L ou -S il me semble qu'ils font leur recherche uniquement sur les paquets installés, non?
Aujourd'hui j'avais besoin de sqlite3.h et apt-file m'indiquait le paquet libsqlite3-dev à installer alors que 'dpkg-query S /usr/include/sqlite3.h' ne trouvait rien de son côté.
Code :
~# apt-file search sqlite3.h
[...]
libspatialite-dev: /usr/include/spatialite/sqlite3.h
libsqlite3-dev: /usr/include/sqlite3.h
~# dpkg-query -S /usr/include/sqlite3.h
dpkg-query: aucun chemin ne correspond à /usr/include/sqlite3.h



RE: [AIDE] Ajout d'une Lib en C - gruik - 04-05-2013

(04-05-2013, 20h51)oosfalte a écrit : Pour ce qui est de dpkg-query -L ou -S il me semble qu'ils font leur recherche uniquement sur les paquets installés, non?

oui, c'est effectivement l'interet de apt-file

sinon au lieu de dpkg-query j'utilisais dpkg directement perso, ça marche aussi (j'imagine que l'un est le frontend générique de l'autre ?)