【发布时间】: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