【问题标题】:Linker error: Qt and libusb-win32链接器错误:Qt 和 libusb-win32
【发布时间】:2023-03-21 03:08:01
【问题描述】:

我尝试开发一个 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 上开发。

谢谢你,
约翰

【问题讨论】:

  • GCC 对包含的库的顺序可能很挑剔,您应该检查命令行是否包含 usb 在您的 .o 文件之前。也使用/ 而不是` in the path; if you want to use ` 你需要转义它们`\`。
  • 看来我可以无错误地编译应用程序。我在引号之间写了库路径并将/替换为`\`。

标签: qt windows-7 usb linker-errors libusb


【解决方案1】:

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

【讨论】:

  • 我尝试在发布模式下编译,但没有任何改变。似乎是 lib 路径的格式有问题。
猜你喜欢
  • 2015-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-03
相关资源
最近更新 更多