Как find_library обрабатывает так номера версий? - PullRequest
2 голосов
/ 31 марта 2020

Как CMake find_library обрабатывает такие номера версий, как в "libFOO.so.3.2"? В некоторых библиотеках есть символические c ссылки из libFOO.so на правильную версию, в некоторых нет.

Находит ли CMake библиотеку без ссылки на символы c, когда я просто использую find_library(NAMES FOO)?
Что я должен сделать, чтобы помочь CMake определить нужную библиотеку?

1 Ответ

3 голосов
/ 31 марта 2020

При условии распространения linux системный менеджер пакетов обычно предоставляет пакеты времени выполнения и пакеты разработки. Если вы установили пакет разработки для библиотеки (например, libFOO-dev), он обычно включает следующие три файла в ваш / usr / lib или / usr / local / lib

libFOO.so.3.2.0 (the versioned binary)
libFOO.so.3 (soname = symlink to versioned binary)
libFOO.so (namelink = symlink to soname)

Ссылка на имя имеет нет сведений о версии в имени файла. Это будет использоваться для поиска библиотеки по параметру командной строки компоновщика, например, -lFOO

Вы должны использовать именную ссылку (например, FOO) в команде find_library cmake.

Компоновщик вставит soname файл в ваш двоичный файл.

Если у вас установлено несколько версий библиотеки, обязательно сделайте символическую ссылку на файл namelink на файл soname, который вы хотите использовать. Это действительно проблема, только если у вас установлено несколько основных версий одной и той же библиотеки. В основной версии API должны быть обратно совместимы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...