2010-11-25 4 views
11

J'ai une bibliothèque statique et une bibliothèque dynamique avec le même nom: libclsocket.a et libclsocket.so Lorsque je spécifie la bibliothèque que je veux lier, il suffit d'entrer -lclsocket comme bibliothèque. Mon programme se conforme et fonctionne parfaitement bien, mais quelle bibliothèque est-ce que j'utilise? la bibliothèque statique ou la bibliothèque dynamique? Je veux donner à mon ami mon programme, et je ne suis pas sûr Si j'ai besoin d'inclure les bibliothèques dans la version. C++, codelite, pcLinuxOS 2010Dans linux comment puis-je savoir si je lier à une bibliothèque statique ou dynamique?

+7

Vous n'avez pas spécifié l'indicateur '-static' lors de la construction avec GCC, il est donc probable que vous liez l'objet partagé. Comme @Soo Wei Tan a répondu, vous pouvez utiliser 'ldd' sur le binaire pour déterminer ses dépendances de l'éditeur d'exécution. – birryree

+0

Puis-je spécifier que la bibliothèque de liens doit être liée statiquement? – TheFuzz

+1

vous pouvez sélectivement lien statique en passant le nom complet de la bibliothèque. Comme 'gcc -o OutFile -l: libclsocket.a'. Notez le ':', c'est très important. Je voudrais trouver la documentation officielle pour ce comportement, mais les pages de manuel de 'gcc' ne mentionnent pas cette utilisation. – birryree

Répondre

5

Vous pouvez essayer d'exécuter ldd sur l'exécutable et de voir si le fichier .so correspondant est détecté comme requis dans la liste des dépendances.

La page de manuel de ldd est here.

+0

Il est lié aux bibliothèques partagées. Alors, comment puis-je lier à une bibliothèque statique? Je suppose également que les bibliothèques partagées sont par défaut. – TheFuzz

2

Si vous utilisez le drapeau -static, tous les composants seront rendus statiques. Et -l peut inclure des bibliothèques partagées. Si vous spécifiez le nom de fichier de la bibliothèque statique (par exemple avec /usr/lib/libfoo.a par exemple, pas de -l ajouté au préalable), vous obtiendrez l'effet souhaité.

Questions connexes