对`libusb_handle_events_completed`的未定义引用

时间:2014-06-26 10:09:45

标签: c linux debian libusb

我正在尝试在Debian(Jessie)上编译mphidflash之后重写低级USB接口与libhidapi-libusb而不是libhid(Debian不再支持)对话但是我'我得到一些编译错误,我不知道该怎么做。

这些是usb-linux.c中包含的内容:

#include <stdio.h>
#include <usb.h>
#include <hidapi/hidapi.h>
#include "mphidflash.h"
#include <errno.h>

以下是我尝试过的错误:

$ gcc main.o hex.o usb-linux.o -lusb -lhidapi-libusb -o mphidflash
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/libhidapi-libusb.so: undefined reference to `libusb_handle_events_completed'
collect2: error: ld returned 1 exit status


$ gcc main.o hex.o usb-linux.o /usr/lib/x86_64-linux-gnu/libhidapi-libusb.a -lusb -lhidapi-libusb -o mphidflash
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/libhidapi-libusb.a(hid.o): undefined reference to symbol 'libusb_detach_kernel_driver'
//usr/local/lib/libusb-1.0.so.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

基本上,我得到一个undefined reference to symbol 'libusb_detach_kernel_driver',这表明我错误地包含了libusb库,但我不知道还有什么可以尝试。

1 个答案:

答案 0 :(得分:0)

原来hidapi-libusb使用libusb-1.0而不是libusb-0.1(两者都可以在Debian上安装)。

我将包含更改为:

#include <stdio.h>
#include <libusb-1.0/libusb.h>
#include <hidapi/hidapi.h>
#include "mphidflash.h"
#include <errno.h>

编译:

$ gcc main.o hex.o usb-linux.o -lusb-1.0 -lhidapi-libusb -o mphidflash

我会将我的更改放入git repo中,并在我完成后发布链接。