2009-08-20 9 views
6

Je dois lier mon code à une bibliothèque partagée sans le préfixe lib. (disons, foo.so) Le premier problème est l'option -l ne trouve pas le fichier. J'ai donc essayé inclure directement ce fichier à la dernière compilation comme ceci:Comment créer un lien vers une bibliothèque partagée sans le préfixe lib * dans un répertoire différent?

gcc un ao /PATH/TO/FOO/foo.so

Mais dans ce cas, une est difficile liée à foo.so comme chemin absolu comme on le voit dans « un ldd »:

/PATH/TO/FOO/foo.so

dans le déploiement final les deux fichiers finiraient par être dans le même dossier, ce qui devrait être normale lien, pas le chemin absolu. Comment puis-je faire ceci?

+0

double possible de [Comment faire un lien en utilisant GCC sans -l ni chemin d'accès en dur pour une bibliothèque qui ne respecte pas la convention de nommage libNAME.so?] (http://stackoverflow.com/questions/207069/how-to-link-using-gcc-without-l-nor-hardcoding-path- pour-une-bibliothèque-qui-ne-fait-pas) –

Répondre

6

-Wl, -rpath ,. -> pour utiliser le répertoire courant pour la recherche de fichiers lib. (même s'il n'est pas trouvé dans la compilation, ok au moment de l'exécution) au lieu de -library -> use library.so.

Cela semble fonctionner correctement. J'espère que quelqu'un trouvera cela utile.

12

En supposant une plate-forme ELF, si vous pouvez reconstruire foo.so:
- le meilleur solution est de nommer simplement libfoo.so
- la meilleure solution est de mettre en SONAME dessus:

gcc -Wl,-soname,foo.so -o foo.so foo.o 

lorsque vous lien plus tard avec:

gcc -o a.out a.o /path/to/foo.so 

seulement le SONAME sera enregistré comme une dépendance, pas uncomplet.

Si vous ne pouvez pas reconstruire foo.so, faites ceci:

rm -f foo.so && ln -s /path/to/foo.so foo.so && 
    gcc -o a.out a.o ./foo.so && rm -f foo.so 
Questions connexes