2014-11-17 2 views
0

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

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

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

cannot find -lKinova.API.CommLayerUbuntu 

Это сбивает с толку меня, потому что я говорю 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 и добавить ссылку на задание? – SirDarius

+0

Да, я сделал это сейчас. Кажется, он ищет '-lKinova.API.CommLayerUbuntu', хотя я указал' Kinova.API.CommLayerUbuntu.so'. – Karnivaurus

ответ

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'? – Karnivaurus

+1

Конечно, попробуйте. Но API может включать в себя другие скомпилированные утилиты, которые полагаются на библиотеку, имеющую текущее имя. Символьная ссылка не нарушит их. – Peter

Смежные вопросы