2009-12-18 2 views
2

J'ai construit libshared.so avec dépend libshared_dependent.soComment résoudre les liens de bibliothèque partagée pendant la compilation (GCC)?

Maintenant, je suis compilerai app.bin qui utilise libshared.so, maintenant à gcc moment de la compilation me veut spécifier -lshared_dependent Sinon, cela donne une erreur que certains symboles ne sont pas trouvés.

Est-il possible qui, au moment de la compilation, je ne ai pas besoin de préciser -lshared_dependent, je veux que tout préciser -lshared œuvres?

+0

@Sateesh Il me demande de changer beaucoup et beaucoup de makefile. J'ai changé la dépendance d'un fichier partagé et maintenant je ne veux pas changer les makefiles d'un autre projet. – SunnyShah

+0

Mais pourquoi vous ne voulez pas spécifier la bibliothèque de dépendances? – sateesh

Répondre

4

Vous avez juste besoin de relier libshared.so à libshared_dependent.so lorsque vous êtes produisant libshared.so.

gcc -shared -o libshared.so -lshared_dependant file1.o file2.o 

De cette façon, lorsque vous liez votre application à libshared.so il va aussi à tout ce lien libshared.so dépend

1

Vous ne devriez pas avoir besoin du lien app.bin avec libshared_dependent.so. Cela dit, l'éditeur de liens voudra vérifier les symboles dans libshared.so peut être trouvé, il devra donc localiser libshared_dependent.so afin de le faire. Si libshared_dependent.so se trouve dans un répertoire différent de libshared.so, vous devrez spécifier le chemin d'accès à libshared_dependent.so en utilisant l'option de l'éditeur de liens -rpath-link.

Parce que -rpath-lien est une option de liaison, vous devez dire à gcc de le transférer à l'éditeur de liens:

gcc -Wl,-rpath-link,/directory-that-libshared_dependent-is-in 
Questions connexes