cuốn sách gpt4 ai đã làm

linux - không tìm thấy gói phát triển libudev

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 09:11:14 26 4
mua khóa gpt4 Nike

Tôi đang viết một ứng dụng tự động phát hiện việc cắm/rút phích cắm của thiết bị.

Tôi đang sử dụng C++ với khung Qt. libudev.h được bao gồm trong mã của tôi. Tôi thực sự đã vượt qua sudo apt-get cài đặt libudev-dev Đã cài đặt gói libudev-dev nhưng QtCreator vẫn gặp thông báo lỗi:không tìm thấy gói phát triển libudev

Tệp.pro:

...
CẤU HÌNH += bảng điều khiển c++11
CẤU HÌNH -= app_bundle
unix: CẤU HÌNH += link_pkgconfig
unix: PKGCONFIG += libudev
TIÊU ĐỀ += DeviceManager.h
NGUỒN += main.cpp \
Trình quản lý thiết bị.cpp
...

Tệp DeviceManager.h:

#ifndef THIẾT BỊ QUẢN LÝ_H
#xác định DEVICEMANAGER_H

#include
#include
#include
#include

#include "DeviceModel.h"

lớp Trình quản lý thiết bị: QObject công khai
{
Q_ĐỐI TƯỢNG
public:
Trình quản lý thiết bị rõ ràng (QObject *parent = 0);

QSet getDevices();
QStringList getDevicePaths();

private:
QSet đã cắmThiết bị;

};
#endif // THIẾT BỊ QUẢN LÝ_H

Tệp DeviceManager.cpp:

#include "DeviceManager.h"

DeviceManager::DeviceManager(QObject *parent) :
QObject(cha mẹ)
{
}

QSet DeviceManager::getDevices()
{
QSet devices = QSet();
cấu trúc udev *udev;
struct udev_enumerate *enumerate;
cấu trúc udev_list_entry *dev_list, *dev_list_entry;
cấu trúc udev_device *dev;
struct udev_monitor *mon;

/*Tạo đối tượng udev */
udev = udev_new();
nếu (!udev)
{
qDebug() << "Không thể tạo udev";
trả lại thiết bị;
}

/* Thiết lập màn hình để giám sát các thiết bị ẩn */
mon = udev_monitor_new_from_netlink(udev, "udev");
udev_monitor_filter_add_match_subsystem_devtype(mon, "usb", "usb_device");
udev_monitor_enable_receive(mon);

liệt kê = udev_enumerate_new(udev);
udev_enumerate_add_match_subsystem(liệt kê, "usb");
udev_enumerate_scan_devices(liệt kê);
dev_list = udev_enumerate_get_list_entry(liệt kê);
QString ID nhà cung cấp, số sê-ri, tên nhà phát triển, tên thiết bị;
udev_list_entry_foreach(dev_list_entry, dev_list)
{
const char *đường dẫn;
đường dẫn = 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");

nếu (!dev)
{
qDebug() << "Không thể tìm thấy thiết bị usb gốc.";
trả lại thiết bị;
}
nhà cung cấpID = udev_device_get_property_value(dev, "ID_VENDOR_ID");
devName = udev_device_get_property_value(dev, "DEVNAME");
if (!vendorID.isNull() && VendorID.compare("04e8") == 0) // ID nhà cung cấp của thiết bị Samsung
{
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();
nếu (! SerialNumber.isNull())
{
thiết bị->setDownloadMode(false);
thiết bị->setSerialNumber(serialNumber);
}
khác nếu(!devName.isNull())
{
thiết bị->setPath(devName);
thiết bị->setDownloadMode(true);
}
khác
phá vỡ;
thiết bị->setName(deviceName);
thiết bị.insert(thiết bị);
}
udev_device_unref(dev);
}
/* Giải phóng đối tượng điều tra viên */
udev_enumerate_unref(liệt kê);
udev_unref(udev);
cái này->pluggedDevices = thiết bị;
trả lại thiết bị;
}

QStringList DeviceManager::getDevicePaths()
{
Kết quả QStringList;
if (this->pluggedDevices.isEmpty())
{
return result;
}
foreach (DeviceModel *thiết bị, this->pluggedDevices)
{
result.append(device->getPath());
}
return result;
}

môi trường:

Hệ điều hành: Ubuntu 18.04.2 LTS

Qt Creator 4.5.2 dựa trên Qt 5.9.5 (GCC 7.3.0, 64bit)

Bạn có thể giúp tôi tìm một lý do?

câu trả lời hay nhất

Thông báo lỗi cho biết bạn đang thiếu libudev-dev hoặc pkg-config. Vì bạn đã cài đặt libudev-dev, có nghĩa là thứ bạn đang thiếu là pkg-config dụng cụ. Nếu lệnh:

pkg-config --version

Không in một cái gì đó như thế này:

0,29,1

thế thì bạn đang thiếu pkg-config dụng cụ. Cài đặt nó:

sudo apt cài đặt pkg-config

Điều này sẽ giải quyết vấn đề của bạn. Hãy nhớ xóa khỏi tệp dự án của bạn LIBS += -ludev. Bạn chỉ cần PKGCONFIG +=libudev.

Về linux - không tìm thấy gói phát triển libudev, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/55945023/

26 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress