Comment gcc/ld trouver zlib.de la sorte?

J'ai utilisé la librairie zlib pour les âges et de ne jamais songé au fait qu'il est nommé légèrement de manière non conventionnelle. Alors que la plupart des bibliothèques sur Linux suivre la convention de nommage de lib<name>.so pour les objets partagés et lib<name>.a pour les archives, zlib est nommé zlib.so/zlib.a. Ma question est: comment fait-gcc/ld savoir rechercher zlib.so lorsque j'utilise -lz comme un lien de drapeau?

Je comprends que pour les liaisons, gcc appelle ld, qui effectue des recherches pour les bibliothèques dans certains chemins d'accès par défaut et de tout chemin d'accès spécifié avec -L, et il ajoute le lib et .so ou .a. parties, en tant que de besoin. Curieusement, gcc est la page de manuel pour relier les options mentionne seulement que l'éditeur de liens peut trouver des archives; il n'y a aucune mention de la .so extension. Le page de man pour les ld au moins mentionne à la fois les extensions, mais encore, ne mentionne que la recherche en ajoutant lib à la bibliothèque spécifiée nom. Comment ld sais pour ajouter le lib après la z pour zlib? Je n'ai jamais vu cela se produire à une autre bibliothèque.

Il n'a pas. Il semble pour libz.so, qui est généralement dans /lib ou /lib64, mais peut, dans certaines distributions effectivement /usr/lib[64]... Si vous avez un zlib.so que les applications utilisent les applications sont appel dlopen(), de sorte que la liaison ne se fait pas par ld (ou ld.so).
devrait-il être une réponse, pas juste un commentaire? Vous avez peut-être frapper le clou sur la tête. Toutefois, quand j'ai utilisé la librairie zlib dans la construction de Matlab mex fonctions, j'ai eu à utiliser -lzlib et de fournir un -L chemin d'accès à un zlib.so.

OriginalL'auteur patrickvacek | 2013-11-18