Libusb неопределенная ссылка на - PullRequest
9 голосов
/ 13 августа 2011

Я пытаюсь настроить libusb API в моей ОС. Я скачал libusb api на libusb.org. Я следовал стандартной процедуре установки:

cd into directory
./configure
make
make check //without errors
make install

Затем я запустил Eclipse C / C ++ и скопировал некоторый код из учебника, найденного в Интернете. Но, пытаясь построить его, я получил следующий вывод:

main.cpp:(.text+0x19): undefined reference to `libusb_init'
main.cpp:(.text+0x76): undefined reference to `libusb_set_debug'
main.cpp:(.text+0x8a): undefined reference to `libusb_get_device_list'
main.cpp:(.text+0x136): undefined reference to `libusb_free_device_list'
main.cpp:(.text+0x142): undefined reference to `libusb_exit'
/tmp/ccOWJGwe.o: In function `printdev(libusb_device*)':
main.cpp:(.text+0x162): undefined reference to `libusb_get_device_descriptor'
main.cpp:(.text+0x28a): undefined reference to `libusb_get_config_descriptor'
main.cpp:(.text+0x4d4): undefined reference to `libusb_free_config_descriptor'
collect2: ld returned 1 exit status

У меня есть libusb.so в / lib, а также у меня есть usb.h в / usr / local / include и ссылка на .so и libusb.a в /usr/local/lib.

Также #include внутри кода является правильным.

Я знаю, что проблема в компоновщике, но я вроде не могу заставить его работать:)

Я использую операционную систему Fedora 15 и компилятор версии gcc 4.6.0 20110603 (Red Hat 4.6.0-10).

Так, что я мог сделать, чтобы разрешить эти неопределенные ссылки? Большое спасибо за помощь:)

Ответы [ 4 ]

23 голосов
/ 27 января 2014

Я столкнулся с той же проблемой. Но я смог решить эту проблему, добавив '-lusb-1.0' к компоновщику.

например: g ++ myfile.cpp -lusb-1.0

16 голосов
/ 13 августа 2011

вы должны установить флаг компоновщика библиотеки для компиляции в компоновщике, Вы можете получить полный список в консоли, выполнив

pkg-config --list-all

Это библиотеки, которые вы установили в своей системе, и вам нужно связать их с теми, которые вы хотите использовать. так что в вашем примере это libusb, так что вы делаете

pkg-config --libs libusb

должен быть вывод

-lusb

или

-lusb-1.0

Это дает вам флаг, который вы должны передать компоновщику. например,

g++ myfile.cpp -lusb[-1.0]

Затем вы редактируете конфигурацию проекта и ищете флаги линкера, для этого должно быть текстовое поле где-то в опциях сборки. я не совсем уверен, где его найти, но поискать его в Google предложил:

Project -> Properties -> C/C++
Build -> Miscellaneous -> flags

После того, как вы его нашли, просто добавьте флаг компоновщика в текстовое поле, и все будет в порядке.

EDIT

так как мой ответ принят, я также добавил другой флаг, который, кажется, работает для многих людей.

1 голос
/ 13 августа 2011

Я не использую Eclipse C / C ++, но я почти уверен, что причина та же, с которой я столкнулся некоторое время назад при настройке проекта C в Netbeans.

Недостаточно иметь #include в вашем коде и библиотеке в нужном месте - вы также должны указать Eclipse, где их искать и как их использовать. Этот турориал показывает, как настроить его в Eclipse.

1 голос
/ 13 августа 2011

Какая у вас командная строка компоновщика?Вам нужно иметь -lusb в команде связывания;просто включенный заголовок не сработает.

...