2010-12-13 55 views
0

Je construis une bibliothèque qui doit être dynamiquement liée à mon projet. La sortie est un fichier .so, donc je pense que je suis sur la bonne voie. Je suis préoccupé par la façon dont il est lié au moment de la compilation - en spécifiant l'emplacement de son makefile et en fonction d'un tas de macros, que je n'ai jamais rencontré auparavant. Puis-je supposer que depuis que je construis une bibliothèque .so (plutôt qu'un .a) que je suis en fait relier dynamiquement? Ou est-il possible que les librairies .so soient liées statiquement, auquel cas j'ai besoin de séparer les fichiers make/config pour mieux comprendre ce qui se passe?Possibilité de lier statiquement les bibliothèques d'objets partagés?

Merci,

Andrew

Répondre

0

Je ne suis pas familier avec la structure interne des objets partagés et executables, donc je ne pouvais donner quelques conseils pratiques.

En supposant que vous utilisez gcc, il devrait avoir -shared option lors de la liaison des fichiers d'objets dans la bibliothèque - de cette façon ld (appelé par gcc) fait objet partagé au lieu de binaire exécutable.

gcc -shared -o libabc.so *.o ... 

Lorsque vous liez une application avec cette libabc.so il devrait relier sans erreurs et après avec ldd commande, vous devriez être en mesure de voir libabc.so parmi ses dépendances.

$ ldd app 
    ... 
    libabc.so => ...............