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

これはリンカーエラーです。

libusbリンカに、これらの参照された関数(eg -lusb)とその場所(eg)を含むを含めるように指示する必要があります-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

pkg-configライブラリに必要なコンパイラフラグを取得するために使用します。

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