"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."