找不到libudev开发包
Posted
技术标签:
【中文标题】找不到libudev开发包【英文标题】:libudev development package not found 【发布时间】:2019-09-20 12:53:45 【问题描述】:我正在编写一个应用程序自动检测设备是否插入/拔出。
我在 Qt 框架中使用了 C++。 libudev.h 包含在我的代码中。
我实际上通过sudo apt-get install libudev-dev
成功安装了libudev-dev包,但QtCreator仍然有错误消息:libudev development package not found
文件.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,64 位)
你能帮我找到原因吗?
【问题讨论】:
显示您的 .pro... 尝试添加LIBS += -ludev
它仍然不适合我。
展示您的 .pro 并提供minimal reproducible example
谢谢。我更新了内容。你能帮我找出问题吗?我认为它与源代码无关。它在另一台装有 Ubuntu14.04 的机器上运行良好
你真的安装了pkg-config
吗?做sudo apt install pkg-config
。然后再试一次。
【参考方案1】:
错误消息表明您缺少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
。
【讨论】:
【参考方案2】:我使用它,它就像一个魅力
sudo apt-get install libudev-dev
另一个是这个,我在网上找到的,但没试过。
build/install-build-deps.sh
【讨论】:
以上是关于找不到libudev开发包的主要内容,如果未能解决你的问题,请参考以下文章
注销当前用户后 Win10找不到Administrator用户登录选项怎么解决