Я использовал zlib целую вечность и никогда не думал о том, что его называют немного нетрадиционно. Хотя большинство библиотек в Linux следуют соглашению об именах lib<name>.so
для общих объектов и lib<name>.a
для архивов, zlib имеет имя zlib.so
/zlib.a
. Мой вопрос: как gcc/ld знает, что нужно искать zlib.so
, когда я использую -lz
в качестве флага ссылки?Как gcc/ld найти zlib.so?
Я понимаю, что для связывания, НКУ вызывает Л.Д., который ищет библиотеки в определенных путях по умолчанию и любому пути, указанный с -L
, и это добавляет lib
и .so
или .a.
частей по мере необходимости. Как ни странно, gcc's manual page for linking options только упоминает, что компоновщик может найти архивы; не упоминается расширение .so
. Код , по крайней мере, упоминает оба расширения, но по-прежнему упоминает поиск путем добавления lib
к указанному имени библиотеки. Как ld знать, чтобы добавить lib
послеz
для zlib? Я никогда не видел, чтобы это случилось с другой библиотекой.
Это не так. Он ищет 'libz.so', который обычно находится в'/lib' или '/ lib64', но может быть в некоторых дистрибутивах на самом деле находится в'/usr/lib [64] '... Если у вас есть' zlib. поэтому ', которые используют приложения, приложения вызывают' dlopen() ', поэтому связь не выполняется с помощью' ld' (или 'ld.so'). – twalberg
@twalberg, должен ли это быть ответом, а не просто комментарием? Возможно, вы ударили ноготь по голове. Однако, когда я использовал zlib для создания функций Matlab mex, мне пришлось использовать '-lzlib' и предоставить путь' -L' к 'zlib.so'. – patrickvacek