Erreur dll runtime

Erreur dll runtime - Divers - Programmation

Marsh Posté le 09-11-2010 à 09:54:11    

Salut à tous,
 
je cherche à recompiler une appli qui se linke contre un demi milliard de librairies dynamiques, la compilation et l'édition des liens se passent bien, par contre, ça chie dans la colle à l'exécution.  
 
Je code sous XCode, je vais mettre les équivalents en ligne de commandes.
 
Mon appli à besoin de libA.dylib (=.so) qui se trouve chez moi dans /opt/local/lib
 
Pour l'édition des liens, je rentre donc un truc comme ça :  
 

Code :
  1. ld -filelist[liste de mes .o] -L/path/lib1 -L/path/lib2 -L/opt/local/lib/ -l1 -l2 -lA


 
Le probleme arrive à l'exécution, je reçois un message
 

Code :
  1. Library not loaded /usr/lib/libA.dylib, reason : image not found


 
Sachant que aucune autre lib ne se trouve dans /usr/whatever, je ne comprends pas vraiment pourquoi ce con persiste à chercher une lib là où elle n'est pas. Si quelqu'un a une idée...

Reply

Marsh Posté le 09-11-2010 à 09:54:11   

Reply

Marsh Posté le 09-11-2010 à 11:27:45    

Il est étrange que libA.dylib, soit une librairie de type "so", puisque son extension est "dylib".
 
L'édition des liens se fait avec les extensions par défaut. Par exmple -lA indique que le programme attend libA.so. Si cela passe sans erreur, c'est peut-être parce que vous auriez un libA.so en plus de votre libA.dylib.
 
Il doit y avoir une subtilité avec ce genre de librairie (que je ne connais pas personnellement).
 
D'où vient votre makefile ? Est-ce que vous l'avez entièrement recréé ? Disposez vous encore du makefile d'origine ?
 
Le chargement des bibliothèque dynamique se fait "dynamiquement", comme son nom l'indique. Il doit y avoir une ligne dans le programme contenant quelque chose du genre "LoadLibrary("/usr/lib/libA.dylib" );". Mais cela doit échouer, ce qui fait que le programme émet son message.
 
Avez-vous un fichier libA.dylib, quelque part ?
 
Par expérience, ce genre de problème vient soit d'un fichier manquant à l'exécution, soit de variables d'environnement pour les chemins qui ne sont pas définies ou mal définies.

Reply

Marsh Posté le 09-11-2010 à 14:32:08    

dylib est l'extension des librairies dynamiques sous mac os, comme la plupart des gens qui codent avec gcc le font sous linux, j'ai indiqué l'équivalent.
 
Comme je l'ai écrit dans mon premier post, libA.dylib est bien présent, dans /opt/local/. Ce qui me perturbe, c'est que le chemin /usr/lib/ n'est hardcodé nulle part (ni dans le code, ni dans les makefiles).
 
J'ai réussi à le tromper en mettant un alias vers /opt/local/lib/libA.dylib dans /usr/lib comme ça il le trouve, mais bon c'est un peu crade.

Reply

Sujets relatifs:

Leave a Replay

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