首页
统计
关于
Search
1
C语言:获取程序运行消耗的时间(gettimeofday)
564 阅读
2
QT-利用Qcamera查看USB摄像头参数(数据帧格式+分辨率)
388 阅读
3
嵌入式linux组播接收发送失败解决
371 阅读
4
CMAKE报告:COULD NOT FIND PKGCONFIG (MISSING: PKG_CONFIG_EXECUTABLE)
356 阅读
5
Linux 查看硬盘通电时间
298 阅读
编程语言
C/C++
PHP
Go
分享
随笔
Linux
OpenHarmony
登录
Search
标签搜索
C++
QT
Linux
Git
Go
C
程序执行时间
函数执行时间
GDAL
zeromq
github
Centos
代理
goKit
gitea
247.1
累计撰写
34
篇文章
累计收到
0
条评论
首页
栏目
编程语言
C/C++
PHP
Go
分享
随笔
Linux
OpenHarmony
页面
统计
关于
搜索到
34
篇与
的结果
2026-03-01
Tmux安装及核心操作
一、安装 Tmux根据你的操作系统选择对应命令:系统安装命令Ubuntu / Debiansudo apt update && sudo apt install tmuxCentOS / RHEL / Fedorasudo dnf install tmux (旧版用 yum)macOSbrew install tmuxArch Linuxsudo pacman -S tmuxopenSUSEsudo zypper install tmux安装完成后,在终端输入 tmux -V 查看版本,确认安装成功。二、核心概念会话 (Session):一个独立的工作区,可以包含多个窗口。窗口 (Window):会话里的“标签页”,每个窗口都是一个独立的终端。窗格 (Pane):窗口可以被分割成多个区域,同时显示多个终端界面。操作 Tmux 的通用模式:先按前缀键 Ctrl+b,再按命令键。三、核心操作速查表1. 会话管理操作命令(终端中)快捷键(Tmux内)新建会话tmux new -s <会话名>-查看所有会话tmux lsCtrl+b s接入/重新连接会话tmux attach -t <会话名>-分离会话(临时退出)-Ctrl+b d关闭/杀死会话tmux kill-session -t <会话名>-2. 窗口管理操作快捷键创建新窗口Ctrl+b c重命名当前窗口Ctrl+b ,切换到下一窗口Ctrl+b n切换到上一窗口Ctrl+b p切换到指定编号窗口Ctrl+b 数字 (0-9)列出窗口选择Ctrl+b w关闭当前窗口Ctrl+b & (或输入 exit)3. 窗格管理操作快捷键垂直分割(左右分屏)Ctrl+b %水平分割(上下分屏)Ctrl+b "在窗格间移动光标Ctrl+b 方向键循环切换窗格Ctrl+b o调整当前窗格大小Ctrl+b Alt+方向键 (或 Ctrl+b Ctrl+方向键 微调)最大化/还原当前窗格Ctrl+b z关闭当前窗格Ctrl+b x (或输入 exit)4. 其他常用操作快捷键/命令进入复制模式(滚动查看历史)Ctrl+b [ (用方向键滚动,按 q 退出)粘贴复制的内容Ctrl+b ]重新加载配置文件Ctrl+b : 然后输入 source-file ~/.tmux.conf四、快速入门示例启动一个新会话:tmux new -s mywork创建分屏:按 Ctrl+b % 左右分屏。按 Ctrl+b " 上下分屏。在不同窗格中执行命令(如左边编辑代码,右边运行程序)。新建一个窗口:按 Ctrl+b c,然后在新窗口中查看日志。临时退出(分离会话):按 Ctrl+b d。你会回到普通终端,但 Tmux 中的程序仍在运行。重新连接会话:tmux attach -t mywork彻底结束会话:在 Tmux 内输入 exit 或按 Ctrl+b & 关闭所有窗口。
2026年03月01日
8 阅读
0 评论
0 点赞
2025-09-18
Centos 所有的空间扩容给home
步骤 1:确认卷组和物理卷信息首先查看当前 LVM 卷组(VG)和物理卷(PV)的状态:vgdisplay centos # 查看 centos 卷组的剩余空间 pvdisplay # 查看已加入 LVM 的物理卷如果 centos 卷组本身已有未分配空间(Free PE / Size 不为 0),可直接跳到步骤 4;否则需要将其他空闲磁盘(如 /dev/sdb 等)加入 LVM。步骤 2:将空闲磁盘初始化为物理卷(PV)以 /dev/sdb 为例(其他空闲磁盘如 /dev/sdc 等可同理操作):bash确认磁盘未被使用(已挂载的需先卸载)umount /data1 # 如果 /dev/sdb 已挂载到 /data1,先卸载 # 将磁盘初始化为 LVM 物理卷(会清除磁盘数据,务必确认数据已备份!) pvcreate /dev/sdb如果需要添加多个磁盘(如 /dev/sdb 到 /dev/sdh),可批量执行:for disk in /dev/sd{b,c,d,e,f,g,h}; do umount /data$(echo $disk | sed 's/\/dev\/sd//') # 卸载对应挂载点 pvcreate $disk done步骤 3:将物理卷(PV)加入 centos 卷组(VG)# 将 /dev/sdb 加入 centos 卷组(多个磁盘用空格分隔) vgextend centos /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg /dev/sdh再次确认卷组空闲空间:vgdisplay centos # 此时 Free PE / Size 应显示新增的空间步骤 4:扩展 /home 逻辑卷(LV)# 扩展逻辑卷(将所有空闲空间分配给 /home,+100%FREE 表示使用全部空闲空间) lvextend -l +100%FREE /dev/mapper/centos-home步骤 5:扩展文件系统(使扩容生效)由于 CentOS 的 /home 通常使用 XFS 文件系统(若为 ext4 则用 resize2fs),需执行:xfs_growfs /dev/mapper/centos-home验证扩容结果df -h /home # 查看 /home 分区的空间是否已增加最后一步就是删除/etc/fstab里面的挂在项,不然会出现开机异常
2025年09月18日
10 阅读
0 评论
0 点赞
2025-07-17
银河麒麟上QT应用自动创建桌面快捷方式及增加自启动
银河麒麟使用的桌面为MATE桌面。#include <QCoreApplication> #include <QFile> #include <QTextStream> #include <QDir> #include <QMessageBox> #include <QStandardPaths> #include <QFileInfo> #include <QProcess> bool shortcutExists(const QString& appName) { // 获取桌面路径 QString desktopPath = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation); if (desktopPath.isEmpty()) { qDebug() << "无法获取桌面路径"; return false; } // 构建.desktop文件路径 QString desktopFileName = appName + ".desktop"; QString desktopFilePath = desktopPath + QDir::separator() + desktopFileName; // 检查文件是否存在 return QFile::exists(desktopFilePath); } bool isAutostartEnabled(const QString& appName) { // 获取自动启动目录 QString autostartDir = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation) + "/autostart/"; QString autostartFilePath = autostartDir + appName + ".desktop"; // 检查自动启动文件是否存在 return QFile::exists(autostartFilePath); } QString findApplicationIcon(const QString& appName, const QString& execPath) { // 获取可执行文件所在目录 QFileInfo execFileInfo(execPath); QString execDir = execFileInfo.absolutePath(); // 检查目录下是否存在logo.png QString logoPath = execDir + QDir::separator() + "logo.png"; if (QFile::exists(logoPath)) { qDebug() << "找到应用图标:" << logoPath; return logoPath; } // 尝试查找其他可能的图标文件 QStringList possibleIcons = { "icon.png", appName.toLower() + ".png", appName.toLower() + ".svg", "application-x-executable" // 默认应用图标 }; for (const QString& icon : possibleIcons) { QString iconPath = execDir + QDir::separator() + icon; if (QFile::exists(iconPath)) { qDebug() << "找到替代图标:" << iconPath; return iconPath; } } // 如果没有找到自定义图标,使用系统默认图标 qDebug() << "未找到自定义图标,使用默认图标"; return "application-x-executable"; // 系统默认应用图标 } bool createDesktopShortcut(const QString& appName, const QString& execPath, const QString& iconPath = "", const QString& comment = "", bool terminal = false, bool mateSpecific = true) { // 获取桌面路径 QString desktopPath = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation); if (desktopPath.isEmpty()) { qDebug() << "无法获取桌面路径"; return false; } // 构建.desktop文件路径 QString desktopFileName = appName + ".desktop"; QString desktopFilePath = desktopPath + QDir::separator() + desktopFileName; // 创建文件 QFile file(desktopFilePath); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { qDebug() << "无法创建文件:" << desktopFilePath; return false; } // 写入文件内容 QTextStream out(&file); out << "[Desktop Entry]\n"; out << "Version=1.0\n"; out << "Type=Application\n"; out << "Name=" << appName << "\n"; if (!comment.isEmpty()) out << "Comment=" << comment << "\n"; out << "Exec=" << execPath << "\n"; out << "Terminal=" << (terminal ? "true" : "false") << "\n"; // 使用提供的图标路径或默认图标 QString effectiveIcon = !iconPath.isEmpty() ? iconPath : "application-x-executable"; out << "Icon=" << effectiveIcon << "\n"; // MATE桌面特定配置 if (mateSpecific) { out << "X-MATE-Autostart-enabled=true\n"; out << "X-MATE-Autostart-Delay=0\n"; out << "X-MATE-Provides=panelapplet\n"; out << "Categories=GNOME;GTK;Utility;\n"; } else { out << "Categories=Application;\n"; } file.close(); // 设置文件权限为可执行 QFileInfo fileInfo(desktopFilePath); QFile::setPermissions( desktopFilePath, fileInfo.permissions() | QFileDevice::ExeUser | QFileDevice::ExeGroup | QFileDevice::ExeOther ); qDebug() << "桌面快捷方式已创建:" << desktopFilePath; // 刷新MATE桌面(可选) QProcess::startDetached("mate-panel --replace &"); return true; } bool enableAutostart(const QString& appName, const QString& execPath, const QString& iconPath = "", const QString& comment = "", bool terminal = false, bool mateSpecific = true) { // 获取自动启动目录 QString autostartDir = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation) + "/autostart/"; QString autostartFilePath = autostartDir + appName + ".desktop"; // 创建自动启动目录(如果不存在) QDir().mkpath(autostartDir); // 创建文件 QFile file(autostartFilePath); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { qDebug() << "无法创建自动启动文件:" << autostartFilePath; return false; } // 写入文件内容 QTextStream out(&file); out << "[Desktop Entry]\n"; out << "Version=1.0\n"; out << "Type=Application\n"; out << "Name=" << appName << "\n"; if (!comment.isEmpty()) out << "Comment=" << comment << "\n"; out << "Exec=" << execPath << "\n"; out << "Terminal=" << (terminal ? "true" : "false") << "\n"; // 使用提供的图标路径或默认图标 QString effectiveIcon = !iconPath.isEmpty() ? iconPath : "application-x-executable"; out << "Icon=" << effectiveIcon << "\n"; // 自动启动特定配置 out << "NoDisplay=true\n"; out << "Hidden=false\n"; out << "X-GNOME-Autostart-enabled=true\n"; out << "X-MATE-Autostart-enabled=true\n"; // MATE桌面特定配置 if (mateSpecific) { out << "X-MATE-Autostart-Delay=0\n"; out << "Categories=GNOME;GTK;Utility;\n"; } else { out << "Categories=Application;\n"; } file.close(); // 设置文件权限 QFileInfo fileInfo(autostartFilePath); QFile::setPermissions( autostartFilePath, fileInfo.permissions() | QFileDevice::ExeUser | QFileDevice::ExeGroup | QFileDevice::ExeOther ); qDebug() << "已启用开机自启动:" << autostartFilePath; return true; } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 获取应用信息 QString appName = QCoreApplication::applicationName(); QString execPath = QCoreApplication::applicationFilePath(); QString comment = "My Qt Application for MATE Desktop"; // 查找应用图标 QString iconPath = findApplicationIcon(appName, execPath); // 检查并创建桌面快捷方式 if (!shortcutExists(appName)) { if (createDesktopShortcut(appName, execPath, iconPath, comment, false, true)) { qDebug() << "MATE桌面快捷方式创建成功!"; } else { qDebug() << "MATE桌面快捷方式创建失败!"; return 1; } } else { qDebug() << "桌面快捷方式已存在,跳过创建"; } // 检查并启用开机自启动 if (!isAutostartEnabled(appName)) { if (enableAutostart(appName, execPath, iconPath, comment, false, true)) { qDebug() << "已成功设置开机自启动!"; } else { qDebug() << "开机自启动设置失败!"; return 1; } } else { qDebug() << "开机自启动已启用,跳过设置"; } return 0; }
2025年07月17日
30 阅读
0 评论
0 点赞
2024-12-20
OpenHarmony代码规范
代码规范所有文件,包括自动生成的编译文件package.json都要格式化(IDE快捷键Ctrl+Alt+L);函数命名,C++大驼峰,TS、JS小驼峰,函数命名注意动宾结构;静态常量需使用全大写,文件目录使用全小写(不建议包含特殊字符如"-"和"_"等);类名使用大驼峰,函数的参数、全局变量和局部变量都使用小驼峰,命名要规范化,见名知意;if语句后必须跟“{”,哪怕只有一行代码;有break或return的条件,先break或return再走其他的逻辑;条件判断,当一个分支达成条件时及时返回,不需要再走其他分支;代码中避免出现魔鬼数字,需补上注释,或者用符合语义的名词常量代替,如下: // One minute has 60 seconds. let time = 60 const ONE_MINUTE = 60 let time = ONE_MINUTE字符串拼接使用模板字符串;组件使用,除了宽高属性可以在一行,其他的属性必须换行;TS、JS中关于是否添加";"的问题,风格要统一,建议添加";";字符串和图片资源等的使用,支持"$r"使用的,全部使用"$r"引用;新增文件注意开源协议、版权检查;截图要使用真机效果图;readme中使用“.”,不要用“、”,检查错别字;异步方法中需要返回方法的返回值,不用声明变量,直接return,如下: return await this.mediaTest.getFileAssets(fetchOp)方法中的参数需要类型声明;import 文件顺序,同类型放一起;string.json中description要写简要描述,zh下要用中文;TS、JS语言缩进为2格,C++语言缩进为4格;涉及应用截图时,图片不能包含人物、关键信息、网络等有侵权风险的资源;工程中不要配置签名信息,禁止上传local.properties和package-lock.json等系统自动生成的文件;规范日志格式,统一用[Sample_包名]开头,如时钟日志,使用[Sample_Clock],日志打印需要使用Hilog接口,建议封装单独的Logger类 ,示例如下:import hilog from '@ohos.hilog' ... class Logger { private domain: number = 0xFF00 private prefix: string = '[Sample_Clock]' private format: string = '%{public}, %{public}' ... debug(...args: any[]) { hilog.debug(this.domain, this.prefix, this.format, args) } ... }注释“//”后要加一个空格;如果注释跟在代码后面,则“//”前要加一个空格; // 正确示例 let a = 10 let a = 10 // 正确示例代码中避免出现中文字符,要使用资源代替,符合国际化开发标准;应用包名统一使用“com.samples.xxx”,“xxx”为特性名称;ReadMe编写规范标题:以特性名称命名;介绍:介绍sample用了哪些包,具有哪些功能,给出完整包名并附上链接;效果预览:屏幕截屏或者视频,文件不超过4个;3.1 使用说明:介绍应用的使用说明,具体的操作步骤和用法信息,示例如下:在主界面,可以点击图片、视频、文档、音频等按钮进入对应目录的文件列表浏览界面;在文件列表浏览界面,点击“+”按钮,可以添加文件;在文件列表浏览界面,长按列表项会出现删除图片,点击删除图标可以删除文件;在图片文件列表界面,点击图片可以进入图片预览界面。工程目录:给出项目中关键的目录结构并描述它们的作用,示例如下:entry/src/main/ets/ |---Application |---filemanager | |---data | | |---FileDataSource.ets // 懒加载数据格式 | |---pages | | |---audio | | | |---AudioFileList.ets // 音频列表页面 | | |---common | | | |---FileList.ets // 同类型文件列表展示页面,接收文件类型,展示特定类型的文件列表 | | |---document | | | |---DocumentFileList.ets // 文档列表页面 | | |---image | | | |---ImageFileList.ets // 图片列表页面 | | | |---ImagePreview.ets // 图片预览页面 | | |---video | | | |---VideoFileList.ets // 视频列表页面 | | |---FileManagerHome.ets // 首页主体内容 |---MainAbility |---pages | |---index.ets // 首页 Library/src/main/ets/ |---filemanager | |---components | | |---ThumbnailImage.ets // 缩略图组件 | |---fileio | | |---FileIoManager.ts // 文件管理,待开发 | |---medialibrary | | |---MediaLibraryManager.ts // 主要封装了mediaLibrary库相关的接口,实现相关功能,如:对文件的增、删、查和图片预览功能 | |---userfilemanager | | |---UserFileManager.ts // 封装userFileManager库相关的接口 | |---FileManager.ts // 文件管理接口,统一封装了各模块对外提供的功能接口 |---mock // 本地数据 |---utils // 日志工具具体实现:先描述功能都在哪个模块,再具体描述如何实现这些功能的,以及在哪里使用他们,附上文件链接;示例如下:增添文件、删除文件、查找指定类型文件文件和预览图片的功能接口封装在MediaLibraryManager,源码参考:MediaLibraryManager.ts使用mediaLibrary.getMediaLibrary来获取MediaLibrary对象;读取每个文件的数据:使用MediaLibrary.getFileAssets读取满足条件的文件集合FetchFileResult,然后调用FetchFileResult.getFirstObject();创建模拟文件:使用MediaLibrary.getPublicDirectory()获取系统预定的目录,然后使用MediaLibrary.createAsset();删除指定路径的文件:使用MediaLibrary.deleteAsset();获取预览图:使用image.createImageSource()创建指定的文件资源ImageSource,然后调用ImageSource.createPixelMap(),接口参考:@ohos.multimedia.image 。在Library模块中通过封装FileManager向外提供功能接口,如MediaLibraryManager.getPixelMapByFileAsset(),源码参考:FileManager.ts如效果预览中的图片列表,读取指定类型的文件:在FileList.ets中调用FileManager.getFileAssets();创建模拟文件:在FileList.ets中调用FileManager.createTxtFileAsset();删除指定路径的文件:在FileList.ets中调用FileManager.deleteFileAsset();获取缩略图:在ThumbnailImage.ets 中调用FileManager.getThumbnail();如效果预览中的图片预览,获取预览图:在ImagePreview.ets 中调用FileManager.getPixelMapByFileAsset()。相关权限:介绍应用的使用权限,附上链接;依赖: 介绍对其他sample的依赖,附上sample链接;约束与限制:6.1 支持应用运行的操作系统版本和设备,示例如下: 本示例仅支持标准系统上运行,支持设备:RK3568; 6.2 API版本、SDK版本(如果依赖Full SDK,附上替换链接),示例如下: 本示例仅支持APIXX版本SDK,版本号:3.X.X.X;(如果涉及Full SDK还需加上:本涉及涉及使用系统接口:XXX,需要手动替换Full SDK才能编译通过,具体操作可参考[替换指南]。) 6.3 支持的IDE版本,示例如下: 本示例需要使用DevEco Studio 3.0 Beta4 (Build Version: 3.0.0.992, built on July 14, 2022)才可编译运行; 6.4 高等级APL特殊签名说明,示例如下: 本示例涉及[相关权限]为system_basic(或者system_core)级别(相关权限级别可通过[权限定义列表]查看),需要配置高权限签名,可参考[特殊权限配置方法]; 下载:给出单独下载本工程的命令,在代码中替换工程目录并以/结尾,如下面示例中的 FileManager/FileManager,示例如下:如需单独下载本工程,执行如下命令:git init git config core.sparsecheckout true echo FileManager/FileManager/ > .git/info/sparse-checkout git remote add origin https://gitee.com/openharmony/applications_app_samples.git git pull origin master工程结构规范Sample工程,应该区分开场景业务逻辑和特性相关封装接口,规则如下:包名命名规则为"com.samples.特性名",工程名命名规则为特性名称,与Readme标题保持一致;特性接口封装放在Library模块下,能够独立编译成har包复用;场景业务逻辑,展示Library模块中特性接口的使用,放在entry目录中;entry/src/main/ets/目录下的pages目录中,只放一个Index.ets,作为入口页面;entry/src/main/ets/目录下创建场景业务目录,存放该场景相关的业务逻辑和页面代码;Library/src/main/ets/目录下创建特性目录,目录下包括components(对外开放的控件目录)、feature(特性封装逻辑目录)、Feature.ts(对外开放的特性接口)等;以FileManager特性为例,工程示例结构如下:entry/src/main/ets/ // 场景业务逻辑放在entry目录下 |---Application // 应用级逻辑 |---MainAbility // 元能力组件 |---filemanager // 场景业务功能(如果存在多个场景,则放在同级目录下) | |---data // 场景业务逻辑相关类或数据 | |---pages // 场景业务逻辑相关页面 |---pages // UI页面 | |---Index.ets // pages下只保留一个Index.ets,作为入口页面 |---utils // 共用的工具类或者模块 Library/src/main/ets/ // 特性接口封装放在Library模块下,能够独立编译成har包复用 |---filemanager // 特性相关封装类 | |---components // 特性相关UI控件类,需要对外开放(部分特性涉及对外提供复用UI控件) | | |---FileImage.ets | |---fileio // 封装了特性相关接口,如果存在多个模块,放在多个目录下如fileio、medialibrary、userfilemanager,不对外开放 | | |---FileIoManager.ts | |---medialibrary | |---userfilemanager | |---FileManager.ts // 对外开放的特性接口,无具体实现(实现在fileio、medialibrary等模块中) |---mock // 模拟数据 |---utils // 特性相关工具类UI自动化用例编写规范用例命名规范为:“包名_测试功能_序号”,如“MyApp_StartAbility_001”,序号表示测试StartAbility功能的第1个用例;用例的开头和结尾都需要有日志打印;打印必须包括用例名称的关键字,用例中每条断言语句前必须添加日志,打印参数信息;DOMAIN设置为0xF811;用例名称中的包名和日志中的包名单独用常量表示,方便包名变更整改;每条用例前需要添加注释; import hilog from '@ohos.hilog'; ... const TAG = '[Sample_MyApp]' const DOMAIN = 0xF811 const BUNDLE = 'MyApp_' ... /** * 介绍用例测试的功能和场景等信息 */ it(BUNDLE + 'StartAbility_001', function() { hilog.info(DOMAIN, TAG, BUNDLE + "StartAbility_001, begin") ... // 介绍单一步骤的功能 hilog.info(DOMAIN, TAG, BUNDLE + "StartAbility_001, code:" + code) expect(0).asserEqual(code) ... hilog.info(DOMAIN, TAG, BUNDLE + "StartAbility_001, end") })PR提交格式规范示例如下:IssueNo: #I56EH7:关联问题 Description: 描述问题. Sig: sig-systemapplications Feature or Bugfix: Bugfix Binary Source: No Signed-off-by: jiangwensai <
[email protected]
>IssueNo管理issue信息;Description描述修改变更内容;Sig统一使用SIG_Sample;Feature or Bugfix,如果是需求选择Feature,问题选择Bugfix;Signed-off-by,注明开发者账号和邮箱;二进制文件合入规范当提交的代码涉及到二进制文件时(图片、视频、压缩包、hap/har包等),需要在OTA.xml中设置文件过滤:1.找到 name 为 "binaryFileTypePolicyFilter" 的过滤器:<filefilter name="binaryFileTypePolicyFilter" desc="Filters for binary file policies" >2.在过滤器中添加行:<fileteritem type="filepath" name="此处填写二进制文件路径" desc="Provided by 二进制文件来源路径(来源是sample本身时填写当前Sample路径即可)"/>例如:在 code/Solutions/Shopping/OrangeShopping 这个Sample中上传 ohos-notification-1.0.0.tgz 二进制文件时,添加行如下:<filteritem type="filepath" name="code/Solutions/Shopping/OrangeShopping/libs/ohos-notification-1.0.0.tgz" desc="Provided by Notification/CustomEmitter"/>来源: 点这里
2024年12月20日
46 阅读
0 评论
0 点赞
2024-09-17
error while loading shared libraries: libmpfr.so.4: cannot open shared object file
在Ubuntu22上编译QT出现这个错误error while loading shared libraries: libmpfr.so.4: cannot open shared object file加载共享库时出错:libmpfr.so.4:无法打开共享对象文件:没有这样的文件或目录解决办法:sudo ln -s /usr/lib/x86_64-linux-gnu/libmpfr.so.6 /usr/lib/x86_64-linux-gnu/libmpfr.so.4
2024年09月17日
93 阅读
0 评论
0 点赞
1
2
...
7