Cmake не может найти библиотеку

0

У меня есть библиотека под названием Kinova.API.CommLayerUbuntu.so которой я хочу связать с cmake. Итак, в моем файле CMakeLists.txt меня есть строка:

target_link_libraries(demo ~/Libraries/Kinova.API.CommLayerUbuntu.so)

Однако во время компиляции я получаю сообщение об ошибке:

cannot find -lKinova.API.CommLayerUbuntu

Это меня Kinova.API.CommLayerUbuntu.so, потому что я говорю cmake искать Kinova.API.CommLayerUbuntu.so, а не для -lKinova.API.CommLayerUbuntu. Может кто-нибудь объяснить, что происходит?

В подробном режиме выход cmake дает следующее:

Linking CXX executable demo
/usr/bin/cmake -E cmake_link_script CMakeFiles/demo.dir/link.txt --verbose=1
/usr/bin/c++       CMakeFiles/demo.dir/demo.cpp.o  -o demo  -L/home/karnivaurus/Libraries -rdynamic -lKinova.API.CommLayerUbuntu -Wl,-rpath,/home/karnivaurus/Libraries 
/usr/bin/ld: cannot find -lKinova.API.CommLayerUbuntu
  • 0
    Не могли бы вы включить подробный режим CMake и добавить в вопрос командную строку ссылки?
  • 0
    Да, я сделал это сейчас. Кажется, он ищет -lKinova.API.CommLayerUbuntu хотя я указал Kinova.API.CommLayerUbuntu.so .
Теги:
cmake

1 ответ

0

-l - это только флаг, используемый, чтобы сообщить компилятору связать библиотеку. Имя вашей библиотеки нестандартно. Компилятор удалит -l и добавит lib к используемой вами строке и ищет файл libKinova.API.CommLayerUbuntu.so.

Это похоже на проблему с распространением этого API. Вы можете попробовать обойти его, создав символическую ссылку из libKinova.API.CommLayerUbuntu.so на Kinova.API.CommLayerUbuntu.so.

  • 0
    Как насчет простого переименования Kinova.API.CommLayerUbuntu.so в libKinova.API.CommLayerUbuntu.so ?
  • 1
    Конечно, попробуйте. Но API может включать другие скомпилированные утилиты, которые полагаются на наличие библиотеки с ее текущим именем. Симлинк не сломает их.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню