- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在编写一个自动检测设备插入/拔出的应用程序。
我将 C++ 与 Qt 框架结合使用。 libudev.h 包含在我的代码中。我实际上通过 sudo apt-get install libudev-dev
安装了 libudev-dev 包,但 QtCreator 仍然有错误消息:libudev 开发包未找到
文件.pro:
...
CONFIG += console c++11
CONFIG -= app_bundle
unix: CONFIG += link_pkgconfig
unix: PKGCONFIG += libudev
HEADERS += DeviceManager.h
SOURCES += main.cpp \
DeviceManager.cpp
...
DeviceManager.h 文件:
#ifndef DEVICEMANAGER_H
#define DEVICEMANAGER_H
#include <QObject>
#include <QDebug>
#include <QSet>
#include <libudev.h>
#include "DeviceModel.h"
class DeviceManager : public QObject
{
Q_OBJECT
public:
explicit DeviceManager(QObject *parent = 0);
QSet<DeviceModel *> getDevices();
QStringList getDevicePaths();
private:
QSet<DeviceModel *> pluggedDevices;
};
#endif // DEVICEMANAGER_H
DeviceManager.cpp 文件:
#include "DeviceManager.h"
DeviceManager::DeviceManager(QObject *parent) :
QObject(parent)
{
}
QSet<DeviceModel *> DeviceManager::getDevices()
{
QSet<DeviceModel *> devices = QSet<DeviceModel *>();
struct udev *udev;
struct udev_enumerate *enumerate;
struct udev_list_entry *dev_list, *dev_list_entry;
struct udev_device *dev;
struct udev_monitor *mon;
/* Create the udev object */
udev = udev_new();
if (!udev)
{
qDebug() << "Can't create udev";
return devices;
}
/* Set up a monitor to monitor hidraw devices */
mon = udev_monitor_new_from_netlink(udev, "udev");
udev_monitor_filter_add_match_subsystem_devtype(mon, "usb", "usb_device");
udev_monitor_enable_receiving(mon);
enumerate = udev_enumerate_new(udev);
udev_enumerate_add_match_subsystem(enumerate, "usb");
udev_enumerate_scan_devices(enumerate);
dev_list = udev_enumerate_get_list_entry(enumerate);
QString vendorID, serialNumber, devName, deviceName;
udev_list_entry_foreach(dev_list_entry, dev_list)
{
const char *path;
path = udev_list_entry_get_name(dev_list_entry);
dev = udev_device_new_from_syspath(udev, path);
udev_device_get_parent_with_subsystem_devtype(dev, "usb", "usb_device");
if (!dev)
{
qDebug() << "Unable to find parent usb device.";
return devices;
}
vendorID = udev_device_get_property_value(dev, "ID_VENDOR_ID");
devName = udev_device_get_property_value(dev, "DEVNAME");
if (!vendorID.isNull() && vendorID.compare("04e8") == 0) // vendor ID of Samsung devices
{
DeviceModel *device = new DeviceModel();
serialNumber = udev_device_get_property_value(dev, "ID_SERIAL_SHORT");
deviceName = QString(udev_device_get_property_value(dev, "DEVPATH")).split("/").last();
if (!serialNumber.isNull())
{
device->setDownloadMode(false);
device->setSerialNumber(serialNumber);
}
else if(!devName.isNull())
{
device->setPath(devName);
device->setDownloadMode(true);
}
else
break;
device->setName(deviceName);
devices.insert(device);
}
udev_device_unref(dev);
}
/* Free the enumerator object */
udev_enumerate_unref(enumerate);
udev_unref(udev);
this->pluggedDevices = devices;
return devices;
}
QStringList DeviceManager::getDevicePaths()
{
QStringList result;
if (this->pluggedDevices.isEmpty())
{
return result;
}
foreach (DeviceModel *device, this->pluggedDevices)
{
result.append(device->getPath());
}
return result;
}
环境:
操作系统:Ubuntu 18.04.2 LTS
Qt Creator 4.5.2 基于 Qt 5.9.5 (GCC 7.3.0, 64bit)
你能帮我找个理由吗?
最佳答案
错误消息表明您缺少 libudev-dev
或 pkg-config
。由于您已经安装了 libudev-dev
,这意味着您缺少的是 pkg-config
工具。如果命令:
pkg-config --version
不打印像这样的东西:
0.29.1
那么您缺少 pkg-config
工具。安装它:
sudo apt install pkg-config
这应该可以解决您的问题。请记住从您的项目文件中删除 LIBS += -ludev
。您只需要 PKGCONFIG += libudev
。
关于linux - 找不到 libudev 开发包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55945023/
所以,我有一个应用程序,我想在 Linux 上收到有关热插拔事件的通知。自然地,我查看了 libudev 及其 API .我还发现了一个有用的 tutorial关于如何将 select() 与 lib
我正在编写一个自动检测设备插入/拔出的应用程序。 我将 C++ 与 Qt 框架结合使用。 libudev.h 包含在我的代码中。我实际上通过 sudo apt-get install libudev-
我一直在搜索如何发送和接收 SMS,并且从如何在 Linux 上执行此操作开始搜索了很多。我所找到的只是 libudev。我对 C/C++ 很满意,所以我希望它适合我。但是我不确定 libudev 是
我正在为 hidraw 驱动程序下的 USB 设备实现一个基于 libudev 的监控代码。我已经实现了来自网络的标准示例,并使用 valgrind 和 gdb 检查了内存泄漏。 /*********
我使用 libudev 检测 USB 设备。初始化监视器和过滤器: struct udev* udev = udev_new(); if (udev == nullptr) { /* error ha
我正在着手进行一个编程项目,该项目需要先确认可移动媒体(例如 USB 拇指驱动器)的设备身份,然后才能继续做一些其他很酷的事情。 我的一些 friend 建议我使用序列号,使用 udevadm 命令进
我正在创建一个程序来列出 Linux 中的所有 USB 设备(在我的例子中是 Ubuntu)。我一直在关注本教程 http://www.signal11.us/oss/udev/并将子系统从“hidr
我正在尝试交叉编译 libusb v1.0.19在 Cygwin 中使用 arm-verifone-linux-gnueabi-gcc 编译器的库,但在 configure 调用结束时显示此错误: u
我必须在我的 debian-sid 操作系统上安装 pcsc-lite 1.8.13。 当我运行 :/configure 时,遇到“install libudev-dev”错误。 我已经使用以下命令安
您好,我如何为插入的设备添加其他信息。例如/dev/ttyUSB0 说: 供应商:设备类型:子系统: 更重要的是我想添加设备类型。我该怎么做,或者这甚至可能吗? 最佳答案 您不能使用 udev 设置设
我有一些使用 udev 库接收热插拔事件的示例 C++ 代码。它在 Ubuntu 10.04 中运行良好。唯一的先决条件是 libudev-dev 包: sudo apt-get 安装 libudev
我使用 libudev 来监控存储设备(USB key 等),这样当它们被修改时,我会在我的程序中收到通知。 Libudev 会告诉您设备是否已添加、删除等,并为您提供设备节点。例如,如果我在我的系统
我正在为我们正在努力测试 libudev 的新平台创建一个测试应用程序,并确保我们的 C 应用程序能够在插入或移除特定的 usb 设备。 在我们的系统上,每次移除和添加此设备时,它都会安装在不同的位置
对于一个小项目,我正在使用 libudev 获取 USB 设备插件/插件的通知。有什么方法可以知道哪个 USB 端口用于通过 libudev 插入设备。实际上有多个端口可用,有必要知道使用了哪个端口。
我们正在使用以下例程(在 Linux 上,使用 libudev)从配置为 USB HID 设备的 PIC 微 Controller 读取数据。仅当按下或释放连接到 PIC 微 Controller 的
我在 ubuntu12.04 上用 g++/gcc 编译,它是“OK”,但我不能使用 raspberry pi tools master 交叉编译 toolsmaster CC := /home/De
我正在尝试使用 Raspbian 将之前在 Ubuntu 系统上运行的应用程序移植到 Raspberry Pi。应用程序应检测新的 USB 闪存驱动器。 udev 监控是这样完成的: /* Creat
我正面临 libudev 的某个问题。我写了一个监听器线程,不断监听通过 usb 连接的设备。我在连续 while 循环开始时使用了 libudev API udev_monitor_receive_
全部,从“apt-get”获取 udev 库后,我正在尝试编译一些在 Ubuntu 中编译的代码。我试图让它在 RedHat 5 中编译,但出现以下编译错误: 错误:libudev.h:没有那个文件或
我需要在 GUI 上显示以太网连接 (eth0) 的状态,即链接是否打开。我有一个 Davicom DM9000 PHY。 我知道有多种方法可以给这只猫换皮,比如解析 ifconfig、轮询/sys/
我是一名优秀的程序员,十分优秀!