2

我在 Ubuntu 上运行 c/c++ 并尝试编译以下代码

#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 的新手用户,因此将不胜感激

谢谢

4

2 回答 2

3

这是一个链接器错误。

您需要告诉链接器 include libusb,其中包含这些引用的函数(例如-lusb)以及它的位置(例如-L/usr/local/lib)。实际值将取决于您的安装。

正如Avidanborisov 的回答所强调的那样,您可以使用工具来确定链接器标志。在我的系统上,这看起来像:

% 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
于 2013-02-24T02:34:18.493 回答
2

Use pkg-config to get the compiler flags needed for the library:

g++ libusbtest.cpp `pkg-config --libs libusb` -o libusbtest
于 2013-02-24T12:15:02.617 回答