2017-07-29 1 views
1

Envisagez la création suivante d'une bibliothèque partagée. Est-il possible de faireDéfinir SONAME après la liaison

g++ -shared -o __targets/libfoo.so libfoo.cpp 
some command that sets SONAME of __targets/libfoo.so to libfoo.so.X 

au lieu de

g++ -shared -o __targets/libfoo.so -Wl,-soname,libfoo.so.X libfoo.cpp 

Le problème est que le numéro de version est inconnu du module qui exécute la commande de liaison.

+0

Ma situation est un peu différente si: j'ai une bibliothèque tierce partie qui n'a pas soname, et je ne peux pas l'avoir rééduqué. –

Répondre

1

Personnellement, je ne pense pas que ce soit une bonne idée en premier lieu, mais si vous en avez vraiment besoin, il existe un programme appelé . Il y a même une chance qu'il soit déjà emballé dans le cadre de votre distribution. Donc, vous devriez être en mesure de mettre soname à la deuxième étape en invoquant la commande suivante:

patchelf --set-soname libfoo.so.X __targets/libfoo.so

+0

Ils devraient mettre à jour le README de patchelf et j'aurais dû vérifier l'aide de patchelf. –

+0

Je serai en mesure d'accepter et d'attribuer la réponse dans 19 heures –

+0

@AdamTrhon Cela arrive. La page de manuel le mentionne également. La fonctionnalité semble remonter à la mi-2014. Du bon côté, vous pouvez toujours améliorer les choses pour les autres. Ils semblent accepter les demandes de retrait. Donc, en théorie, vous pouvez mettre à jour ce fichier README par vous-même. Merci pour l'acceptation cependant. –