链接器错误:Qt 和 libusb-win32

发布于 2024-12-09 19:58:27 字数 2319 浏览 1 评论 0原文

我尝试开发一个 Qt GUI 应用程序,它将使用 USB 与板进行通信。我使用的库是libusb-win32 v1.2.5.0

当我编译应用程序时,出现以下错误:

./debug/thread_usb_comm.o:在函数“ZN15thread_usb_comm15find_usb_deviceEtt”中:

thread_usb_comm.cpp:15: 对“usb_find_busses”的未定义引用
thread_usb_comm.cpp:16: 对“usb_find_devices”的未定义引用
thread_usb_comm.cpp:18: 对“usb_get_busses”的未定义引用
thread_usb_comm.cpp:26: 对“usb_open”的未定义引用

collect2: ld 返回 1 退出状态
mingw32-make[1]: [debug/CALSYS11_calib_app.exe] 错误 1
mingw32-make:[调试]错误2

应用程序代码是:(

头文件)

#ifndef THREAD_USB_COMM_H
#define THREAD_USB_COMM_H

#include <QThread>
#include <QtDebug>
#include "CALSYS11.h"
#include <lusb0_usb.h>

class thread_usb_comm : public QThread
{
    Q_OBJECT

public:
    thread_usb_comm();

private:
    bool device_connected;
    usb_dev_handle *p_usb_device;

    bool find_usb_device(
       unsigned short vendor_id,
       unsigned short product_id
    );
};

#endif // THREAD_USB_COMM_H

(源文件)

#include "thread_usb_comm.h"

thread_usb_comm::thread_usb_comm()
{
    device_connected = false;
}

bool thread_usb_comm::find_usb_device(
    unsigned short vendor_id,
    unsigned short product_id
)
{
    struct usb_bus *bus;
    struct usb_device *dev;
    usb_find_busses();
    usb_find_devices();

    for (bus = usb_get_busses(); bus; bus = bus->next)
    {
        for (dev = bus->devices; dev; dev = dev->next)
        {
            if ((dev->descriptor.idVendor == vendor_id) &&
                (dev->descriptor.idProduct == product_id))
            {
                qDebug ("Device found");
                p_usb_device = usb_open(dev);
                if (0 == p_usb_device)
                {
                    qCritical ("Could not open USB device");
                    return false;
                }
                device_connected = true;
                return true;
            }
        }
    }

    qDebug ("Cannot find specified device");
    return false;
}

我在.pro文件中添加了libusb库的链接:

LIBS += -L\path\to\libusb-win32\lib\gcc -lusb

我在 Windows 7 上开发。

谢谢你,
约翰

I try to develop a Qt GUI application which will communicate with a board using USB. The library I use is libusb-win32 v1.2.5.0.

When I compile the application, the following errors occur:

./debug/thread_usb_comm.o: In function `ZN15thread_usb_comm15find_usb_deviceEtt':

thread_usb_comm.cpp:15: undefined reference to 'usb_find_busses'
thread_usb_comm.cpp:16: undefined reference to 'usb_find_devices'
thread_usb_comm.cpp:18: undefined reference to 'usb_get_busses'
thread_usb_comm.cpp:26: undefined reference to 'usb_open'

collect2: ld returned 1 exit status
mingw32-make[1]: [debug/CALSYS11_calib_app.exe] Error 1
mingw32-make: [debug] Error 2

The application code is:

(header file)

#ifndef THREAD_USB_COMM_H
#define THREAD_USB_COMM_H

#include <QThread>
#include <QtDebug>
#include "CALSYS11.h"
#include <lusb0_usb.h>

class thread_usb_comm : public QThread
{
    Q_OBJECT

public:
    thread_usb_comm();

private:
    bool device_connected;
    usb_dev_handle *p_usb_device;

    bool find_usb_device(
       unsigned short vendor_id,
       unsigned short product_id
    );
};

#endif // THREAD_USB_COMM_H

(source file)

#include "thread_usb_comm.h"

thread_usb_comm::thread_usb_comm()
{
    device_connected = false;
}

bool thread_usb_comm::find_usb_device(
    unsigned short vendor_id,
    unsigned short product_id
)
{
    struct usb_bus *bus;
    struct usb_device *dev;
    usb_find_busses();
    usb_find_devices();

    for (bus = usb_get_busses(); bus; bus = bus->next)
    {
        for (dev = bus->devices; dev; dev = dev->next)
        {
            if ((dev->descriptor.idVendor == vendor_id) &&
                (dev->descriptor.idProduct == product_id))
            {
                qDebug ("Device found");
                p_usb_device = usb_open(dev);
                if (0 == p_usb_device)
                {
                    qCritical ("Could not open USB device");
                    return false;
                }
                device_connected = true;
                return true;
            }
        }
    }

    qDebug ("Cannot find specified device");
    return false;
}

I added the link to the libusb library in the .pro file:

LIBS += -L\path\to\libusb-win32\lib\gcc -lusb

I develop on Windows 7.

Thank you,
Johann

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

水中月 2024-12-16 19:58:27

尝试构建发布而不是调试,否则静态库与编译器版本不兼容(当我尝试使用 MinGW 4.4 构建旧静态库时,我遇到了同样的问题)

Try to build release instead of debug or the static library is incompatible with compiler version (I faced same issue when I tried to build old static library with MinGW 4.4)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文