C ++ CMake: неопределенная ссылка. libusb

У меня следующая структура каталогов:

   ├── CMakeLists.txt
   ├── main.cpp
   ├── libusb
   │   ├── lubusb.h
   │   ├── libusb-1.0.def
   │   └── libusb-1.0.a

Дампбина libusb / libusb-1.0.a:

File Type: LIBRARY

Резюме

     DB0 .bss
     350 .data
      40 .drectve
     CFC .pdata
    7060 .rdata
      20 .rdata$.refptr.INVALID_WINFD
      20 .rdata$.refptr.pCancelIoEx
      10 .rdata$.refptr.usbdk_backend
      30 .rdata$.refptr.usbi_backend
      20 .rdata$.refptr.usbi_default_context
      10 .rdata$.refptr.windows_version
      10 .rdata$.refptr.winusb_backend
     160 .rdata$zzz
     488 .rsrc
   132F0 .text
       0 .text.unlikely
    1090 .xdata

И напишите в CMakeLists.txt следующее:

cmake_minimum_required(VERSION 2.8)
project(untitled1)

set(CMAKE_CXX_STANDARD 11)

set(SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp)
add_executable(untitled1 ${SOURCE_FILES})
target_link_libraries(untitled1 ${CMAKE_CURRENT_SOURCE_DIR}/libusb/libusb-1.0.a)

Код main.cpp:

#include <iostream>
#include "libusb/libusb.h"

int main() {
    libusb_init(NULL);

    std::cout << "Hello, World!" << std::endl;

    return 0;
}

В результате я получаю неопределенную ссылку:

CMakeFiles\untitled1.dir/objects.a(main.cpp.obj): In function `main':
C:/.../untitled1/main.cpp:5: undefined reference to `libusb_init@4'
collect2.exe: error: ld returned 1 exit status
mingw32-make.exe[3]: *** [untitled1.exe] Error 1
mingw32-make.exe[2]: *** [CMakeFiles/untitled1.dir/all] Error 2
mingw32-make.exe[1]: *** [CMakeFiles/untitled1.dir/rule] Error 2
mingw32-make.exe: *** [untitled1] Error 2

Я сделал что-то не так? Может кто-нибудь поможет?


person Theder    schedule 16.07.2018    source источник
comment
Вы смешиваете c и c ++? Кажется, libusb - это C. Можете показать, как включить его заголовок? Может быть, отсутствует внешний C?   -  person Olivier Sohn    schedule 16.07.2018
comment
@OlivierSohn Я включаю вот так: #include libusb / libusb.h   -  person Theder    schedule 16.07.2018
comment
Вы можете отредактировать свой вопрос, включив код, он будет более читабельным (я ничего не вижу :))   -  person Olivier Sohn    schedule 16.07.2018
comment
@OlivierSohn обновлен   -  person Theder    schedule 16.07.2018
comment
Тогда я думаю, что второй ответ stackoverflow.com/questions/2403391/ устранит вашу проблему.   -  person Olivier Sohn    schedule 16.07.2018
comment
@OlivierSohn, К сожалению, extern C не решает мою проблему.   -  person Theder    schedule 16.07.2018
comment
Вы видите этот символ в выводе nm libusb/libusb-1.0.a?   -  person pptaszni    schedule 16.07.2018
comment
@ Ptaq666, я использую dumpbin в Windows, и вывод в тексте вопроса   -  person Theder    schedule 16.07.2018
comment
@Theder да, извините, похоже, что extern C на самом деле уже обработан в заголовке github.com/tenderlove/libusb/blob/master/libusb/libusb.h   -  person Olivier Sohn    schedule 16.07.2018
comment
Вы пробовали инвертировать порядок включения?   -  person Olivier Sohn    schedule 16.07.2018
comment
@OlivierSohn. Просто попробовал, программа не работает   -  person Theder    schedule 17.07.2018