Ошибка компиляции LIBUSB

Я использую c / c ++ в Ubuntu и пытаюсь скомпилировать следующий код

#include <cassert>
#include <cstdio>
#include <libusb-1.0/libusb.h>

int main() {
libusb_context *context = NULL;
libusb_device **list = NULL;
int rc = 0;
ssize_t count = 0;

rc = libusb_init(&context);
assert(rc == 0);

count = libusb_get_device_list(context, &list);
assert(count > 0);

for (size_t idx = 0; idx < count; ++idx) {
libusb_device *device = list[idx];
libusb_device_descriptor desc = {0};

rc = libusb_get_device_descriptor(device, &desc);
assert(rc == 0);

printf("Vendor:Device = %04x:%04x\n", desc.idVendor, desc.idProduct);
}
}

Я получаю следующую ошибку при компиляции своего кода. Понятия не имею, что мне делать?

/tmp/ccESLZ0k.o: In function `main':
libusbtest.cpp:(.text+0x2f): undefined reference to `libusb_init'
libusbtest.cpp:(.text+0x64): undefined reference to `libusb_get_device_list'
libusbtest.cpp:(.text+0xd4): undefined reference to `libusb_get_device_descriptor'
collect2: ld returned 1 exit status

Я начинающий пользователь Ubuntu, c / c ++ и libusb, поэтому любая помощь будет оценена

Спасибо

2

Решение

использование pkg-config чтобы получить флаги компилятора, необходимые для библиотеки:

g++ libusbtest.cpp `pkg-config --libs libusb` -o libusbtest
2

Другие решения

Это линкер ошибка.

Вы должны указать компоновщику, чтобы включить libusbкоторый содержит эти ссылочные функции (например, -lusbа также где он находится (например, -L/usr/local/lib). Фактические значения будут зависеть от вашей установки.

Как Ответ Авиданборисова основные моменты, вы можете использовать инструмент для определения флагов компоновщика. В моей системе это выглядит так:

% pkg-config --libs libusb-1.0
-L/usr/local/Cellar/libusb/1.0.9/lib -lusb-1.0

Вы можете кормить эту информацию напрямую :

% g++ libusbtest.cpp $(pkg-config --libs libusb-1.0) -o libusbtest

Предполагая, что все идет по плану, теперь у вас должен быть исполняемый файл libusbtest в вашем текущем рабочем каталоге. Вы можете запустить его так:

% ./libusbtest
Vendor:Device = 05ac:8006
Vendor:Device = 05ac:8006
Vendor:Device = 05ac:8005
Vendor:Device = 05ac:8005
Vendor:Device = 05ac:850a
Vendor:Device = 05ac:023f
Vendor:Device = 05ac:8403
3

По вопросам рекламы [email protected]