2008-10-16 18 views
36

J'ai une bibliothèque partagée que je souhaite lier un exécutable contre l'utilisation de GCC. La bibliothèque partagée a un nom non standard de la forme libNAME.so, donc je ne peux pas utiliser l'option -l habituelle. (Il se trouve également être une extension Python, et n'a donc pas de préfixe 'lib'.)Comment lier en utilisant GCC sans -l ni chemin d'accès en dur pour une bibliothèque qui ne respecte pas la convention de nommage de libNAME.so?

Je peux passer le chemin d'accès au fichier de bibliothèque directement à la ligne de commande de lien, mais cela entraîne le chemin de la bibliothèque codé en dur dans l'exécutable.

Par exemple:

g++ -o build/bin/myapp build/bin/_mylib.so 

est-il un moyen de créer un lien vers cette bibliothèque sans faire le chemin à hardcoded dans l'exécutable?

Répondre

57

Il est le préfixe qui vous permet de donner des noms différents à vos bibliothèques "". Si vous utilisez

g++ -o build/bin/myapp -l:_mylib.so other_source_files 

devrait rechercher votre chemin pour le _mylib.so.

+1

Ceci, monsieur, est exactement ce que je cherchais. Merci! – kbluck

+0

M'a beaucoup aidé, merci. –

+2

Je trouve que cela se traduit par 'build/bin/_mylib.so' intégré dans la bibliothèque qui a été liée en utilisant' -l: '- au lieu d'incorporer juste' _mylib.so' comme il le fait normalement pour les sonames standard. Par conséquent, lorsque vous essayez de charger '_mylib.so', il recherche le chemin complet (' ldd' le montre) et ne trouve pas '_mylib.so' par lui-même. –

2

Si vous pouvez copier la bibliothèque partagée dans le répertoire de travail lorsque g ++ est appelé alors cela devrait fonctionner:

g++ -o build/bin/myapp _mylib.so other_source_files 
1

Si vous êtes sous Unix ou Linux Je pense que vous pouvez créer un lien symbolique vers la bibliothèque le répertoire que vous voulez la bibliothèque.

Par exemple:
ln -s build/bin/_mylib.so build/bin/lib_mylib.so

Vous pouvez ensuite utiliser -l_mylib

http://en.wikipedia.org/wiki/Symbolic_link