Re: undefined symbol in foreign library
[ Nouvelle discussion
| Répondre au groupe
|
fr.comp.lang.lisp ]
Sujet: Re: undefined symbol in foreign library
De: ...@informatimago.com (Pascal Bourguignon)
Groupes: fr.comp.lang.lisp
Organisation: Informatimago
Date: 26. Apr 2008, 22:25:08
References: 1
|
"card.lemoine@aliceadsl.fr" <card.lemoine@aliceadsl.fr> writes:
> Je vous soumets un problème posé par le comportement nouveau du programme
> que je développe depuis des mois mais sur lequel je tourne en rond depuis
> trois jours.
> Il s'agit d'un développement parallèle en C et en lisp sur une question de
> traitement du signal. Il s'agirait de deux développements séparés à ceci
> près : l'utilisation d'une bibliothèque commune à l'un et à l'autre, et qui
> se développe en même temps que les deux "mains".
Bon, alors après une étude un peu plus aprofondie du problème, voici
quelques explications et la solution.
dlopen(3) effectivement est capable de charger automatiquement les
dépendences des bibliothèques chargées dynamiquement. Mais il faut
savoir que:
- la bibliothèque doit être créée en spécifiant explicitement ses
dépendances. Il est en effet possible de la créer sans lister
les bibliothèques dynamiques dont elle dépend, et alors dlopen ne
saura pas qu'il faut les charger.
- dlopen va normalement chercher les bibliothèques dynamiques là où
elles sont installée (et telles que prises en compte par ldconfig).
- mais bien sur, on peut spécifier des chemins particuliers avec la
variable d'environnement LD_LIBRARY_PATH.
- CEPENDANT, la valeur de la variable d'environnement
LD_LIBRARY_PATH n'est prise en compte lors de l'initialisation de
libdl, la bibliothèque contenant dlopen, et non pas lorsque
dlopen est appelée. Ainsi changer la variable d'environnement au
cours de l'exécution du programme appelant dlopen n'est pas
effectif, il faut qu'elle soit définie avant de lancer le
programme.
En conclusion, pour résoudre ton problème, il faut compiler les
bibliothèques en prennant soin de lister leurs dépendances, et il faut
lancuer clisp en spécifiant un LD_LIBRARY_PATH incluant le chemin où
trouver ces bibliothèques, tant qu'elles ne sont pas installée aux
endroits normaux.
Lancer clisp avec:
LD_LIBRARY_PATH=$HOME/projet_C/lib:$HOME/lib:$LD_LIBRARY_PATH clisp
ou:
export LD_LIBRARY_PATH=$HOME/projet_C/lib:$HOME/lib:$LD_LIBRARY_PATH
clisp
Voir les détails dans :
http://www.informatimago.com/develop/lisp/two-libs.tar.gz
--
__Pascal Bourguignon__ http://www.informatimago.com/
READ THIS BEFORE OPENING PACKAGE: According to certain suggested
versions of the Grand Unified Theory, the primary particles
constituting this product may decay to nothingness within the next
four hundred million years.

|
 cette fonctionnalité est reservée aux membres ayant une session active !
|