【问题标题】:LIBUSB compile errorLIBUSB 编译错误
【发布时间】:2013-02-24 02:30:30
【问题描述】:

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

谢谢

【问题讨论】:

  • N.B:这是c++,没有叫“c/c++”的语言。
  • 完全同意Johnsyweb。你也没有告诉我们你是如何编译你的代码的。
  • "c/c++" 表示 c 和 c++

标签: c++ c ubuntu installation libusb


【解决方案1】:

这是一个链接器错误。

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

由于Avidanborisov's answer 突出显示,您可以使用 工具来确定链接器标志。在我的系统上,这看起来像:

% 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

【讨论】:

  • 如何链接任何代码示例,因为正如我所提到的,我是一个新手用户,所以如果你能告诉我什么命令,或者你知道任何可以帮助我理解这些链接器错误的网站......谢谢
  • @UsmanSharifAmjadKhan:这取决于您使用的链接器。
  • 正如我所说的我是一个新手,因此我已经安装了 libusb-1.0-dev 和 libusb-dev... 我不确定链接器是什么?
  • 链接器错误?你的意思是这些与操作系统或 c 或 c++ 或 libusb 相关...我怎么知道我正在使用哪个链接器?
  • @UsmanSharifAmjadKhan:This answer 可能有助于解释链接器是什么和做什么。大多数人使用编译器附带的链接器。
【解决方案2】:

使用pkg-config 获取库所需的编译器标志:

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

【讨论】:

  • 请注意,对于 libusb-1.0 ,您将使用 pkg-config --libs libusb-1.0
  • 感谢@Avidanborisov 我用 (g++ libusbtest.cpp 'pkg-config --libs libusb-1.0' -o libusbtest) 尝试了上面的命令,但是编译器错误(或错误不知道)说“ g++ libusbtest.cpp 'pkg-config --libs libusb-1.0' -o libusbtest"...你能再帮我一次吗...谢谢你的时间...:)
  • 您需要在pkg-config 命令周围使用反引号,而不是单引号。或者:g++ libusbtest.cpp $(pkg-config --libs libusb) -o libusbtest.
  • 非常感谢,我运行了上面的命令,它没有显示任何东西,但问题是它没有打印任何东西......如你所见,我正在打印供应商 ID 和设备 ID,但没有打印任何内容...如果我打扰了你,我很抱歉....我怎么知道我是否从这段代码中得到了我想要的东西?....:) 谢谢
  • @UsmanSharifAmjadKhan:通过运行构建的可执行文件。
猜你喜欢
  • 1970-01-01
  • 2018-08-19
  • 1970-01-01
  • 1970-01-01
  • 2013-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多