[C] linkage pour librairie linux

linkage pour librairie linux [C] - C - Programmation

Marsh Posté le 03-04-2005 à 11:22:23    

Bonjour,
Je suis en train de dévelloper une librairie c pour linux (libmalib.so). Il  agit d un driver de camera firewire sous linux. Je souhaite utilisé des fonctions déjà existantes dans une application coriander. Lorsque j'ai installé cette appli (fonctionne parfaitement), au niveau des sources, il est apparu tous les fichiers .o que je souhaite utiliser.
 
j' ai récupéré tous les fichiers c, h et o de coriander pour les mettre dans mon repertoire de travail.
Donc je me dit qu'il est possible de créer ce driver en appelant dans mon fichier c, tous les fichiers .h de coriander.
Chose faite, compilation nickel mais a l execution, le premier appel fonction coriander lance une erreur du type fonction non reconnue.
Je me suis dit en incluant les points o coriander a la compile il ferait le lien, donc compliation ok, mais a l execution, après divers appels a des fonctions de la librairie deja installer libdc1394 appelés par des fonctions de coriander, je recois une erreur de type fonction non reconnue (pourtant existante dans libdc).
 
Dois je repasser par la recompliation des fichiers utiles de coriander ou je peux faire ça comme ça?
 
Je suis un peu novice en création de librairie et linkage, si quelqu un a des pistes a me donner cela serait sympa
 
Merci par avance


Message édité par loloA5 le 03-04-2005 à 11:24:01
Reply

Marsh Posté le 03-04-2005 à 11:22:23   

Reply

Marsh Posté le 03-04-2005 à 11:54:47    

loloA5 a écrit :

Bonjour,
Je suis en train de dévelloper une librairie c pour linux (libmalib.so). Il  agit d un driver de camera firewire sous linux. Je souhaite utilisé des fonctions déjà existantes dans une application coriander. Lorsque j'ai installé cette appli (fonctionne parfaitement), au niveau des sources, il est apparu tous les fichiers .o que je souhaite utiliser.
 
j' ai récupéré tous les fichiers c, h et o de coriander pour les mettre dans mon repertoire de travail.
Donc je me dit qu'il est possible de créer ce driver en appelant dans mon fichier c, tous les fichiers .h de coriander.
Chose faite, compilation nickel mais a l execution, le premier appel fonction coriander lance une erreur du type fonction non reconnue.
Je me suis dit en incluant les points o coriander a la compile il ferait le lien, donc compliation ok, mais a l execution, après divers appels a des fonctions de la librairie deja installer libdc1394 appelés par des fonctions de coriander, je recois une erreur de type fonction non reconnue (pourtant existante dans libdc).
 
Dois je repasser par la recompliation des fichiers utiles de coriander ou je peux faire ça comme ça?
 
Je suis un peu novice en création de librairie et linkage, si quelqu un a des pistes a me donner cela serait sympa
 
Merci par avance


 
Est-ce que cette application "coriander" fait appel à une librairie particulière ?
 
Télécharge le document http://fr.lang.free.fr/cours/Gener [...] t_v1.0.doc il explique en p. 9 comment et pourquoi créer une librairie


Message édité par Sve@r le 03-04-2005 à 11:57:15
Reply

Marsh Posté le 03-04-2005 à 15:37:46    

oui il appelle la libraire libdc1394 libraw1394, que j ai installé.
donc selon toi je peux faire include des points donc?
Merci pour la doc


Message édité par loloA5 le 03-04-2005 à 15:43:39
Reply

Marsh Posté le 03-04-2005 à 20:42:49    

A mon avis, comme ça marche à la compilation mais pas à l'exécution c'est que ton pgm fait appel à une librairie dynamique (chargée lors de son appel et non lors de la compilation)
Vérifie si ta variable "LD_LIBRARY_PATH" contient bien le chemin permettant d'accéder aux librairies de "coriander"

Reply

Marsh Posté le 14-04-2005 à 15:46:04    

loloA5 a écrit :


Bonjour,
Je suis en train de dévelloper une librairie c pour linux (libmalib.so). Il  agit d un driver de camera firewire sous linux.  


Attention à l'abus de language: un driver et une library ne sont pas la même chose


Sve@r a écrit :

A mon avis, comme ça marche à la compilation mais pas à l'exécution c'est que ton pgm fait appel à une librairie dynamique (chargée lors de son appel et non lors de la compilation)
Vérifie si ta variable "LD_LIBRARY_PATH" contient bien le chemin permettant d'accéder aux librairies de "coriander"


il faut utiliser la commande ldd qui permet de connaitre les libraries utilisées par un executable

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed