![](/img/trans.png)
[英]"/bin/sh: XX: command not found" error when trying to install development version of R fst package from github
[英]libudev development package not found
我正在編寫一個應用程序自動檢測設備是否已插入/拔出。
我將 C++ 與 Qt 框架一起使用。 libudev.h包含在我的代碼中。 我實際上通過sudo apt-get install libudev-dev
安裝了 libudev-dev package 成功,但是 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, 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
。
我使用它,它就像一個魅力
sudo apt-get install libudev-dev
另一個是這個,我在網上找到的,但沒試過。
build/install-build-deps.sh
您需要將其安裝到您的系統中。 您可以簡單地嘗試這些命令
sudo apt-get update -y
sudo apt-get install -y libudev-dev
如果在安裝libudev-dev
和pkg-config
后問題仍然存在,另一件要檢查的事情是是否使用了正確的pkg-config
。 運行which pkg-config
和 Ubuntu 它應該說/usr/bin/pkg-config
。 對我來說,它說/home/linuxbrew/.linuxbrew/bin/pkg-config
是錯誤的,因為我的PATH
上有/home/linuxbrew/.linuxbrew/bin/
。 然后我從我的PATH
中刪除了 linuxbrew bin 文件夾,錯誤消失了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.