#1 Le 25/03/2008, à 21:46
- Tiéry
Programmation c++ chargement de librairie
Bonjour je ne suis pas un pro du c++ mais il m'est parfois arrivé de programmer avec des librairie quelconque (magick ++,opengl...), pour faire des programme prenant en compre ces librairie on me donnait souvent les commande de compilation voir les makefile
Y'avais par exemple des truc comme ca pour openGL
gcc -o test test.c -lglut -lGL -lmesa
Je vois bien que le -l sgnifie qu'on charge une librairie mais ou trouver celles ci et surtout comment connaitre celle qui sont installé et leut nom
J'ai cherché des tuto mais je n'ai rien trouvé donc merci a ce qui passe par là
Hors ligne
#2 Le 25/03/2008, à 22:42
- heuuuuu
Re : Programmation c++ chargement de librairie
je ne suis pas sur, mais peut etre faut-il regarder dans /lib
Quand les avions en papier ne partent plus au vent
On se dit que l'bon temps passe finalement...
...comme une étoile filante
http://forum.ubuntu-fr.org/viewtopic.php?id=139410
Hors ligne
#3 Le 25/03/2008, à 23:47
- telliam
Re : Programmation c++ chargement de librairie
si tu as -ltoto en ligne de commande tu linkeras avec libtoto.so (si tu utilises les librairies dynamique). elle se trouve classiquement dans /usr/lib ou /usr/local/lib ou dans un des chemins indiqués dans la variable LD_LIBRARY_PATH
"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard
Hors ligne
#4 Le 26/03/2008, à 14:41
- philou8237
Re : Programmation c++ chargement de librairie
et si tu as besoin de charger une bibliotheque dynamique qui ne se trouve pas ds LD_LIBRARY_PATH (genre une que tu as fait toi pour ton programme), tu dois utiliser l'option -L, genr -lmylib -Llib (si tu as un répertoire lib ds ton src, avec un fichier libmylib.so dedans, compilé préalablement).
Hors ligne
#5 Le 26/03/2008, à 18:12
- Tiéry
Re : Programmation c++ chargement de librairie
Merci ca faisait un bout de temps que je me possais la question
très utile et m'a permis d'aller faire des nouvelles recherche sur google
Hors ligne
#6 Le 29/03/2008, à 00:00
- Tiéry
Re : Programmation c++ chargement de librairie
J'ai quasi tout compris depuis je conseille un petit tuto bien pratique pour faire des test sur des petits exemple
http://graal.ens-lyon.fr/~fvivien/Enseignement/PPP-2001-2002/LibDyn.pdf
Par conter il me reste un dernier truc a comprendre
Comment le compilateur fait t'il pour savoir quel méthode son valide, j'ai bien vu qu'il fallait un include d'un header, mais quand c'est des librairie récupérer sur le net comment connait on le header???
En générale j'ai bien vu que celui ci était fourni et portait le meme nom que la lib, mais quand la lib n'a aucun header lui correspondant peut on connaitre les méthodes disponible ?
Hors ligne
#7 Le 29/03/2008, à 01:06
- Link31
Re : Programmation c++ chargement de librairie
En C++ oui, si la bibliothèque a été compilée avec G++ (avec les noms codés et l'outil c++filt). En C tu ne peux connaître que le nom des fonctions, pas leurs paramètres.
Enfin bon, distribuer une bibliothèque binaire sans fichier header, c'est particulièrement stupide.
Par contre si tu as les sources, il suffit de regarder.
Dernière modification par Link31 (Le 29/03/2008, à 01:06)
Hors ligne
#8 Le 29/03/2008, à 12:23
- Tiéry
Re : Programmation c++ chargement de librairie
j'ai les header mais y'en a 50 environs
C'est libavcodec ma lib
Et trouver le bon pour la bonne fonction c chaud
Hors ligne
#9 Le 31/03/2008, à 10:20
- Tiéry
Re : Programmation c++ chargement de librairie
Bon j'ai encore un proleme:mad:
je suis en train de faire ce tuto
http://www.inb.uni-luebeck.de/~boehme/using_libavcodec.html
je ccharge bien mais lib mais mais g++ ne trouve pas les fonction:
/tmp/ccGSZ1vx.o: In function `GetNextFrame(AVFormatContext*, AVCodecContext*, int, AVFrame*)':
avcodes_sample.cpp:(.text+0x155): undefined reference to `avcodec_decode_video(AVCodecContext*, AVFrame*, int*, unsigned char const*, int)'
avcodes_sample.cpp:(.text+0x1f3): undefined reference to `av_read_packet(AVFormatContext*, AVPacket*)'
avcodes_sample.cpp:(.text+0x246): undefined reference to `avcodec_decode_video(AVCodecContext*, AVFrame*, int*, unsigned char const*, int)'
......
Alors que dans mon libavcodec.a il y a bien le fichier utils.o et dans le utils.c il bien la definition de la fonction
Les include passe tres bien aussi, c'est au momment ou g++ cherche la fonction en elle meme et pas la signature seulement
ma commande de compilation:
g++ -L/............../ffmpeg/libavcodec:/............../Documents/INSTALL/ffmpeg/libavformat -lavformat -lavcodec avcodes_sample.cpp -o avcodec_sample
Hors ligne
#10 Le 31/03/2008, à 12:19
- philou8237
Re : Programmation c++ chargement de librairie
là c'est un problème d'inclusion des prototypes de fonctions, l'erreur à lieu avant le linkage.
Vérifie que dans ton avcodes_sample.cpp, il y a bien d'inclut les header de la bibliotheque libavcodec. (ligne #include).
Hors ligne
#11 Le 31/03/2008, à 20:29
- Link31
Re : Programmation c++ chargement de librairie
Au contraire, l'erreur a lieu pendant le linkage.
Essaie de séparer les deux chemins délimités par : dans -L/chemin1:/chemin2, c'est-à-dire écrire à la place -L/chemin1 -L/chemin2 (je ne pense pas que la syntaxe utilisant : soit autorisée).
En fait, il suffit que tu vérifies que les bibliothèques dont tu as besoin sont bien passées à GCC lors du linkage.
Si c'est bien le cas, alors les fichiers headers de libav{codec,format} ne correspondent pas à la même version binaire de ces bibliothèques.
Hors ligne
#12 Le 01/04/2008, à 09:09
- Tiéry
Re : Programmation c++ chargement de librairie
J'ai deja pensé a un probleme comme ca et en théorie vue que j'ai compiler les lib a la main (./configure;make;mahe install) elles doivent etre a jours mais je verifierai d'ici ce WE de plus pres ce qui est compilé
Hors ligne