CMake find_library не может найти мою библиотеку даже с HINTS - PullRequest
0 голосов
/ 19 апреля 2020

У меня есть следующий код:

project(test)
cmake_minimum_required(VERSION 3.17)

set(PNG_DIR C:/Users/Kagami/.emscripten_cache/wasm/ports-builds/libpng)

find_library(PNG_STATIC_LIBRARY
  NAMES libpng.a
  HINTS ${PNG_DIR}
)

message(${PNG_DIR})
message(${PNG_STATIC_LIBRARY})

У меня есть файл с именем libpng.a в этом каталоге PNG_DIR, но find_library по-прежнему возвращает -NOTFOUND. Каковы были бы возможные причины?

Ответы [ 2 ]

1 голос
/ 20 апреля 2020

find_library найдет библиотеку, которую он может использовать с используемой вами аркой. Так что на вашем Windows он будет искать не .a, а .lib.

Но find_path просто поиск файла не имеет значения, настоящая библиотека или нет.

Из документации :

Каждое имя библиотеки, заданное параметром NAMES, сначала рассматривается как имя файла библиотеки, а затем рассматривается с префиксами c, определяемыми платформой (например, lib) и суффиксы (например, .so). Поэтому можно указывать имена библиотечных файлов, такие как libfoo.a, напрямую. Это можно использовать для поиска библиотек stati c в UNIX -подобных системах.

0 голосов
/ 20 апреля 2020

Параметр NAMES для find_library указывает имя библиотеки, а не имя файла.

Таким образом, в вашем случае правильная команда будет

find_library(PNG_STATIC_LIBRARY
  NAMES png
  HINTS ${PNG_DIR}
)

Обратите внимание, что в качестве аргументов для NAMES можно указать более одного имени, если библиотека поставляется под разными именами на разных платформах.

Дополнительное усложнение здесь связано с тем, что на Windows у нас есть два несовместимые цепочки инструментов, MinGW и MSV C. Если ваша библиотека имеет окончание файла .a, она почти наверняка была скомпилирована для набора инструментов MinGW, поэтому вы не сможете использовать ее из сборки Visual Studio. Здесь вам сначала нужно перекомпилировать библиотеку с правильным набором инструментов.

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