Bonjour,
Voilà les hypothèses que je ne peux pas changer :
- Mon fichier final doit se lier statiquement avec une librairie dynamique .so.
- Mon fichier .so n'est pas préfixé par "lib".
- Je ne peux pas avoir mon .so dans le répertoire courant au moment de la compilation.
- A l'exécution, mon fichier .so se trouve dans un répertoire de LD_LIBRARY_PATH.
Actuellement, le .so est dans le répertoire courant à la compilation, et j'ai simplement :passé à la ligne de compilation. Et tout marche bien. Mais il ne faut plus qu'il soit dans le répertoire courant car je suis en train de séparer les fichiers intermédiaires du source. Donc mon répertoire courant est celui du Makefile, et je ne veux pas y mettre de binaires (toto.so est compilée par moi).
Code : Sélectionner tout - Visualiser dans une fenêtre à part toto.so
Je ne peux pas utiliser -l car toto.so ne s'appelle pas libtoto.so. Donc je ne peux pas utiliser -L, car elle est utilisée que si -l est utilisée.
Donc si toto.so ne se trouve pas dans le répertoire courant j'obtiens :à la compilation.
Code : Sélectionner tout - Visualiser dans une fenêtre à part gcc: toto.so: No such file or directory
Et ce, même si toto.so est dans le PATH.
Et si je met le chemin complet vers toto.so dans la ligne de compile :J'ai l'erreur à l'exécution :
Code : Sélectionner tout - Visualiser dans une fenêtre à part MonRep/toto.somême si toto.so se trouve dans le LD_LIBRARY_PATH...
Code : Sélectionner tout - Visualiser dans une fenêtre à part ./MonApp: error while loading shared libraries: MonRep/toto.so: cannot open shared object file: No such file or directory
Il me cherche la librairie avec le répertoire, comme dans ma ligne de link.
Bilan, comment faire pour avoir MonRep/toto.so dans la ligne de compilation, mais que l'exécutable cherche bien toto.so dans LD_LIBRARY_PATH ?
Merci d'avance de vos éclaircissements.
[edit]
une solution à base de ln -s ne me satisfait pas a priori : je me retrouverais avec un exécutable qui recherche libtoto.so.
Partager