accès aux groupes de discussion, consultation et publication d'articles, recherche de "newsgroups"...
membres, identifiez-vous
é-mail Mot de passe
nouveau ? mot de passe oublié ?
Chargement... Chargement en cours...

Groupes français belges canadiens suisses internationaux Nétiquette
Échangez opinions et commentaires dans les forums de discussion.

Re: undefined symbol in foreign library

 [  Nouvelle Discussion Nouvelle discussion  |  Répondre au groupe Répondre au groupe  |  fr.comp.lang.lisp ] 

Retour : Accueil du site fr comp lang lisp   charte stats de ce groupe


  Sujet:   Re: undefined symbol in foreign library  
 De: ...@informatimago.com (Pascal Bourguignon)
 Groupes: fr.comp.lang.lisp
 Organisation: Informatimago
 Date: 24. Apr 2008, 02:41:44
 References: 1 2 3 4 5
"card.lemoine" <card.lemoine@wanadoo.fr> writes:

> Pascal Bourguignon a écrit :
>> "card.lemoine" <st_georges@tele.fr> writes:
>> 
>>> Pascal Bourguignon a écrit :
>>>
>>>> Est-on sur que la libgsl est déjà chargée dans clisp?
>>>>
>>> Pardon je crois que j'ai compris votre question de travers.
>>> Qu'entendez-vous par "déjà chargée" ? 
>> Les dépendances d'une bibliothèque ne sont pas chargées
>> automatiquement.  Il faut les charger explicitement.
>> 
> Même en faisant coller les codes de votre démo plus près de ma
> situation (ci-dessous), cela se déroule comme comme vous le dites. Et
> pendant près d'un an cela a fonctionné je ne sais comment. Je suis
> éloigné de mes bases toute cette semaine et le début de l'autre. Je
> vous remercie beaucoup et vais essayer de comprendre (ou de
> m'habituer) à ces comportements.

Une solution pourrait être que chaque bibliothèque utilise dlopen pour
charger les sous-bibliothèques qu'elle utilise elle même.  Mais c'est
de la programmation C.  Je trouverais mieux de le faire en lisp.  Note
qu'il suffit de _définir_ un call-out ou une variable, pour que la
bibliothèque spécifiée par :LIBRARY soit chargée.  Il n'est pas
nécessaire d'appeler la fonction définie.

On peut donc définir au niveau lisp une dépendance d'une bibliothèque
par la seule donnée d'une paire: nom de la bibliothèque, nom d'une
fonction dans la bibliothèque.

(define-foreign-library bib1    "libbib1.so"    "bib1_init"
    :depends-on (bib0))

(define-foreign-library bib2    "libbib2.so"    "bib2_init"
    :depends-on (bib1 bib3))

(define-foreign-library bib3    "libbib3.so"    "bib3_init"
    :depends-on (bib0))

(define-foreign-library example "libexample.so" "example_init"
    :depends-on (bib1 bib2))

et alors:

(load-foreign-library example)

chargerait automatiquement les dépendances en exécutant simplement des
formes:

    `(ffi:def-call-out ,(gensym) 
         (:name ,fun-name)
         (:arguments) ; no need, since we won't call it.
         (:return-type nil) ; idem
         (:language :stdc)
         (:library ,lib-name))

dans le bon ordre.




(On pourrait aussi éviter de nommer les bibliothèques avec des
symboles, en utilisant directement le nom "libexample.so", mais comme
ce nom peut changer d'une plateforme à l'autre (eg. "example.dll"  sur
MS-Windows), ajouter une indirection permet de d'utiliser
load-foreign-library de façon un peu plus "portable").

-- 
__Pascal Bourguignon__                     http://www.informatimago.com/

"What is this talk of "release"?  Klingons do not make software
"releases".  Our software "escapes" leaving a bloody trail of
designers and quality assurance people in its wake."


DateSujet  Auteur
21.04.
* undefined symbol in
card.lemoine@aliceadsl.fr
22.04.
+* Re: undefined symbol in
Pascal Bourguignon
22.04.
|+- Re: undefined symbol in
card.lemoine@aliceadsl.fr
22.04.
|`* Re: undefined symbol in
card.lemoine
22.04.
| +- Re: undefined symbol in
card.lemoine
23.04.
| `* Re: undefined symbol in
Pascal Bourguignon
24.04.
|  `* Re: undefined symbol in
card.lemoine
24.04.
|   `*   Re: undefined symbol in
Pascal Bourguignon
24.04.
|    `* Re: undefined symbol in
card.lemoine
24.04.
|     `- Re: undefined symbol in
Pascal Bourguignon
26.04.
`* Re: undefined symbol in
Pascal Bourguignon
28.04.
 `- Re: undefined symbol in
card.lemoine
Groups Explorer contact votre avis comment ça marche? rechercher un groupe suggérer un groupe abuse accueil du site   Imprimer cette page   Envoyer cette page à un(e) ami(e)
Free counter and web stats