2016-01-26 2 views
0

Я пытаюсь создать приложение, использующее библиотеку LibUSB.CMake не может найти внешнюю библиотеку

В предыдущем вопросе я спросил here Мне сказали использовать find_path и find_library, чтобы сделать поиск в тексте CMake для заголовков и двоичных файлов. Однако даже после того, как вручную отрываясь места установки библиотечные с dnf и указанием их PATHS или HINTS я всегда еще получаю ошибку:

/usr/bin/ld: cannot find -lUSB 
collect2: error: ld returned 1 exit status 

Ниже Релевент CMakeLists.txt, мой импорт линия в main.cpp является #include <libusb-1.0/libusb.h>

add_executable(project main.cpp) 
find_path(LIBUSB_INCLUDE_DIR 
    NAMES libusb.h 
    PATHS "/usr/include/" 
    PATH_SUFFIXES "include" "libusb") 
find_library(LIBUSB_LIBRARY 
    NAMES USB 
    HINTS "/usr/lib/" "/usr/lib64/" "/usr/include/" 
    PATH_SUFFIXES "lib" "lib32" "lib64") 

target_include_directories(project PRIVATE "/usr/lib/" "/usr/lib64/") 
target_link_libraries(project USB) 

Очевидно, что я делаю что-то неправильно в этом ляп хаков, но может кто-нибудь сказать мне что?

+0

Разве вы не используете * '$ {LIBUSB_LIBRARY}' где-нибудь? – Biffen

+0

Если вы не поняли моего ответа, пожалуйста, помогите улучшить его комментариями к ответу. – usr1234567

+0

@ usr1234567 Я понял ваш ответ, но подумал, что теперь задаю другой вопрос. –

ответ

0

Как было показано выше, в оригинальном вопросе, here, вся находки и включая функция может быть заменена просто с:

target_link_libraries(project_name <other_dependencies> usb-1.0),

в файле, где цель сборки определено.

1

Вы не используете результат своих операций поиска в любом месте. Вы сообщаете CMake, чтобы найти заголовки и сохранить найденные пути в LIBUSB_INCLUDE_DIR, а также найти его и найти в его каталоге в LIBUSB_LIBRARY, а затем вы проиграете их и вместо этого используйте hardcoded "/usr/lib/" "/usr/lib64/" и USB. Попробуйте это:

target_include_directories(project PRIVATE ${LIBUSB_INCLUDE_DIR}) 
target_link_libraries(project ${LIBUSB_LIBRARY}) 
+0

Я пробовал ваше решение, однако моя ошибка изменилась на: '/ usr/bin/ld: CMakeFiles/botspotptp.dir/main.cpp.o: undefined ссылка на символ «libusb_set_debug» /usr/lib64/libusb-1.0.so.0: символы с добавлением ошибок: отсутствует DSO из командной строки collect2: error: ld возвращен 1 статус выхода' Что такое DSO? –

+0

@LordNibbler Вы спросили дяди Google? Возможно, вам стоит рассмотреть несколько руководств по связыванию «вручную», прежде чем CMake войдет в изображение. – Angew

+0

Я не вижу, что ручное связывание имеет отношение к CMake; кроме того, как любой хороший интернет-гражданин, я тщательно просмотрел google перед публикацией здесь. Я нашел ссылку на необходимость pthread, которую я нашел и включил, используя тот же метод, но это не решило или не изменило проблему. –

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