У меня есть следующий код в моем CMakeLists.txt для поиска моей общей библиотеки libsieve.so
set(CPPLIB_DIR "${CMAKE_SOURCE_DIR}/../core/build")
find_library(CPPLIB_SIEVE_LIBRARY NAMES libsieve PATHS CPPLIB_DIR)
Но он терпит неудачу и не найдет мою библиотеку. У меня есть следующая структура каталогов:
libsieve.so
CMakeLists.txt
Что я делаю неправильно?
Я не знаю, почему cmake не находит нужную библиотеку, но я могу предложить способ сделать это с помощью cmake-gui: если при первом запуске «configure» не удается найти библиотеку, вы можете указать ее на Нужная библиотека вручную (задайте полный абсолютный путь). В большинстве случаев такое решение работает для меня.
Также, если библиотека была построена с помощью одной цепочки инструментов (скажем, Intel C ++), а ваш проект строится с другой цепочкой инструментов (скажем, clang), сбой при поиске библиотеки может быть вызван двоичной несовместимостью между проектом и библиотекой.
Upd. Первоначальной проблемой была ссылка на CPPLIB_DIR. Это должно было быть:
find_library(CPPLIB_SIEVE_LIBRARY NAMES sieve PATHS ${CPPLIB_DIR})
Cmake find_library
ожидать, что вы предоставите имя библиотеки или имя файла библиотеки.
Вы смешали их, добавив префикс «lib» к имени вашей библиотеки. Поэтому вы должны попытаться заменить libsieve
либо sieve
или же libsieve.so
,