linux paddle For C++环境搭建

news2024/11/17 13:29:34

paddle介绍

Paddle是类似tesseract的文字识别ocr。因为tesseract-ocr的中文识别效果不好。因此才准备安装Paddle。Paddle最方便的安装方式的使用Python的包管理安装。pip3 install paddlepaddle。但我使用了一下感觉还是用C++更加方便,QT + OpenCV + Paddle应当还不错。所以才有了下面这一篇教程。

环境说明

  1. 电脑系统是Ubuntu23.04
  2. 安装的OpenCV是使用apt安装的,不是自己编译安装的
  3. 因为墙的原因,直接使用的Paddle编译好的库,没有使用源码安装

安装步骤

  1. 确保系统中已经安装openCV
# 搜索安装opencv
sudo apt search libopencv-dev
sudo apt install libopencv-dev
# 确定pkg-config能找到opencv头文件和库文件
pkg-config --libs --cflags opencv4
  1. 下载Paddle库文件

这里下载。我下载的是manylinux_cpu_avx_mkl_gcc8.2
下载完成后解压。

tar zxvf paddle_inference.tgz
cd paddle_inference/
# 这个目录中就是paddle的头文件和相关库文件
# 这里的库文件需要提取出来,加入到系统搜索目录
# 使用下面的命令提取出共享库文件
mkdir paddle_lib
find . -name "*.so*" | xargs -i cp {} ./paddle_lib
# 完成后paddle_lib目录下面就会有几个动态库文件
# 下面将这些动态库加入到系统搜索目录中
cp -a paddle_lib /usr/lib
vi /etc/ld.so.conf.d/paddle.conf
# 加入搜索目录
/usr/lib/paddle_lib
# 更新
ldconfig
  1. 下载推理模型model和PaddleOCR

PaddleOCR类似一个Paddle的命令行命令,但这个命令需要自己编译,不像tesseract可以直接使用apt安装。这里编译PaddleOCR是从源码编译的有点麻烦,如果只是想在C++中使用Paddle可以不用编译PaddleOCR,但了解如何编译PaddleOCR可以帮助您理解paddle的编译过程。

# 使用下面命令下载PaddleOCR
git clone https://gitee.com/paddlepaddle/PaddleOCR.git

这里下载推理模型。下载时点击"推理模型"链接下载,我下载的是ch_ppocr_server_v2.0_det_infer.tar,49.5M。下载后解压。
将解压后的文件放到PaddleOCR/PaddleOCR/deploy/cpp_infer/inference。这里的inference目录是自己新建的,用于存放模型文件。

cd PaddleOCR/deploy/cpp_infer/
mkdir inference
cd inference
mv ~/Downloads/ch_ppocr_server_v2.0_det_infer .

编译PaddleOCR

编译之前需要修改一些配置

cd PaddleOCR/deploy/cpp_infer/
git checkout release/2.7
vi tools/build.sh

# 这里的你的opencv目录,因为我使用的apt安装的,试了几次指定opencv目录都无效
# 因为这里设置失败,所以后面我直接更改的CMakeLists.txt
OPENCV_DIR= "你的opencv安装目录"
# 下面这个就是上面下载的Paddle库文件目录
LIB_DIR=your_paddle_inference_dir
# 下面这两个是使用显卡推理使用的,这里不使用
#CUDA_LIB_DIR=your_cuda_lib_dir
#CUDNN_LIB_DIR=your_cudnn_lib_dir

BUILD_DIR=build
rm -rf ${BUILD_DIR}
mkdir ${BUILD_DIR}
cd ${BUILD_DIR}
cmake .. \
    -DPADDLE_LIB=${LIB_DIR} \
    -DWITH_MKL=ON \
    -DWITH_GPU=OFF \
    -DWITH_STATIC_LIB=OFF \
    -DWITH_TENSORRT=OFF \
    -DOPENCV_DIR=${OPENCV_DIR} \
#    -DCUDNN_LIB=${CUDNN_LIB_DIR} \
#    -DCUDA_LIB=${CUDA_LIB_DIR} \
#    -DTENSORRT_DIR=${TENSORRT_DIR} \

# 根据你cpu核心数加个数字,多线编译
make -j16

# 再更改一下CMakeLists.txt第74行,这里的优化等级有问题。将-o3改为-O3
vi CMakeLists.txt
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O3 ${FLAG_OPENMP} -std=    c++11")

# 改了上面配置后就可以尝试编译一下了
sh tools/build.sh

# 如果你也和我一样找不到OpenCVConfig.cmake,可以像我一样直接更改CMakeLists.txt,不用cmake自带的find_package找opencv。我也试过更改CMAKE_PREFIX_PATH,明明目录下有OpenCVConfig.cmake,还是提示找不到OpenCVConfig.cmake。因此一气之下自己改CMakeLists.txt。如果找不到OpenCV会提示以下错误:
CMake Error at CMakeLists.txt:47 (find_package):
  Could not find a package configuration file provided by "OpenCV" with any
  of the following names:

    OpenCVConfig.cmake
    opencv-config.cmake

  Add the installation prefix of "OpenCV" to CMAKE_PREFIX_PATH or set
  "OpenCV_DIR" to a directory containing one of the above files.  If "OpenCV"
  provides a separate development package or SDK, be sure it has been
  installed.

# 可以更改CMakeLists.txt 49行,改为如下内容
else ()
  #find_package(OpenCV REQUIRED PATHS ${OPENCV_DIR}/share/OpenCV NO_DEFAULT_PATH)
  find_package(PkgConfig)
  pkg_search_module(OPENCV4 REQUIRED opencv4)
  link_directories(${OPENCV4_LIBRARY_DIRS})
  link_libraries(${OPENCV4_LIBRARIES})
  include_directories(${OPENCV4_INCLUDE_DIRS})
  include_directories("${PADDLE_LIB}/paddle/include")
  link_directories("${PADDLE_LIB}/paddle/lib")
endif ()
#include_directories(${OpenCV_INCLUDE_DIRS})

# 再尝试编译
sh tools/build.sh

运行PaddleOCR

./ppocr --help
# 如果不报错,而是显示支持的选项就表示成功了,PaddleOCR的命令就可以使用的
# 只是一个帮助命令完全看不出推理有什么效果因此可以使用下面命令,看下推理效果
./build/ppocr --det_model_dir=../inference/ch_ppocr_server_v2.0_det_infer/ --image_dir=./doc/imgs/cmake_step3.png --det=true --rec=false
# 如果报找不到图片,可以使用绝对路径
# 运行成功后会在output目录下生成一个cmake_step3.png的图片,这个图片中的文字都会框出来

输入图片

输出图片

C++中使用paddle

这里主要依照官网的教程,Paddle官网教程

  1. 确定已经下载Paddle库,并解压
  2. 这里下载ResNet50推理模型
  3. 下载推理示例
git clone https://gitee.com/cuizhi/Paddle-Inference-Demo.git
# 将步骤1下载的Paddle库,复制到Paddle-Inference-Demo/c++/lib/
cp -a ~/Downloads/paddle_inference/ Paddle-Inference-Demo/c++/lib/
# 将步骤2下载的推理模型复制到Paddle-Inference-Demo/c++/cpu/resnet50
cp -a ~/Downloads/resnet50 Paddle-Inference-Demo/c++/cpu/resnet50
  1. 修改编译选项
# 因为我的电脑没有安装CUDA,因此需要关闭GPU选项
cd Paddle-Inference-Demo/c++/cpu/resnet50
vi complie.sh
# 26行开始关闭ONNXRUNTIME,这个第三方库老是与库里要求版本不一致
WITH_MKL=ON
WITH_ONNXRUNTIME=OFF
WITH_ARM=OFF
WITH_MIPS=OFF
WITH_SW=OFF

LIB_DIR=${work_path}/../../lib/paddle_inference

cmake .. -DPADDLE_LIB=${LIB_DIR} \
  -DDEMO_NAME=${DEMO_NAME} \
  -DWITH_MKL=${WITH_MKL} \
  -DWITH_ONNXRUNTIME=${WITH_ONNXRUNTIME} \
  -DWITH_ARM=${WITH_ARM} \
  -DWITH_MIPS=${WITH_MIPS} \
  -DWITH_SW=${WITH_SW} \
  -DWITH_STATIC_LIB=OFF

# 之后就可以编译了, 会生成resnet50_test
./compile.sh
  1. 运行程序
./build/resnet50_test --model_file resnet50/inference.pdmodel --params_file resnet50/inference.pdiparams
# 显示以下内容表示成功
I0310 08:20:42.485941  6242 device_context.cc:737] oneDNN v2.5.4
WARNING: Logging before InitGoogleLogging() is written to STDERR
I0310 08:20:42.643239  6242 resnet50_test.cc:76] run avg time is 157.477 ms
I0310 08:20:42.643280  6242 resnet50_test.cc:91] 0 : 0
I0310 08:20:42.643291  6242 resnet50_test.cc:91] 100 : 2.04163e-37
I0310 08:20:42.643296  6242 resnet50_test.cc:91] 200 : 2.1238e-33
I0310 08:20:42.643299  6242 resnet50_test.cc:91] 300 : 0
I0310 08:20:42.643303  6242 resnet50_test.cc:91] 400 : 1.6849e-35
I0310 08:20:42.643309  6242 resnet50_test.cc:91] 500 : 0
I0310 08:20:42.643317  6242 resnet50_test.cc:91] 600 : 1.05767e-19
I0310 08:20:42.643327  6242 resnet50_test.cc:91] 700 : 2.04094e-23
I0310 08:20:42.643334  6242 resnet50_test.cc:91] 800 : 3.85254e-25
I0310 08:20:42.643342  6242 resnet50_test.cc:91] 900 : 1.52391e-30

如果只是学习使用官方教程到这里就结束了,但我的目的是想将Paddle,openCV以及Qt一起使用,因此下面还要探索如果简单方便的将Paddle库引入到Qt中。

  1. 移植Paddle库到QT

Paddle库无非就是提供了头文件和库文件,要做的就是把其中的Paddle文件加入到Qt项目管理文件中,具体就是项目的.pro文件。废话不多说开造。

# 使用QT creator新建一个paddleTest项目
# paddleTest.pro文件中加入以下内容

# 这个是自己的Paddle库所在位置
PADDLE_PATH = /home/XXXXXXX/Downloads/paddle_inference/

INCLUDEPATH += \
    $$PADDLE_PATH/paddle/include \
    $$PADDLE_PATH/third_party/install/cryptopp/include \
    $$PADDLE_PATH/third_party/install/glog/include \
    $$PADDLE_PATH/third_party/install/mkldnn/include \
    $$PADDLE_PATH/third_party/install/mklml/include \
    $$PADDLE_PATH/third_party/install/protobuf/include \
    $$PADDLE_PATH/third_party/install/xxhash/include \
    $$PADDLE_PATH/third_party/install/gflags/include

LIBS += -L$$PADDLE_PATH/paddle/lib -lpaddle_inference
LIBS += -L$$PADDLE_PATH/third_party/install/gflags/lib -lgflags
LIBS += -L$$PADDLE_PATH/third_party/install/glog/lib -lglog
LIBS += -L$$PADDLE_PATH/third_party/install/mkldnn/lib -lmkldnn
LIBS += -L$$PADDLE_PATH/third_party/install/mklml/lib -liomp5 -lmklml_intel
LIBS += -L$$PADDLE_PATH/third_party/install/protobuf/lib -lprotobuf
LIBS += -L$$PADDLE_PATH/third_party/install/xxhash/lib -lxxhash

# mkldnn库名字有点问题,我的Paddle库中是libmkldnn.so.0,使用下列命令来一个软链接,其它有几个动态库也是如此都有一个版本号,也可以加一个软链接
ln -s libmkldnn.so.0 libmkldnn.so

# 新建一个main.cc,复制Paddle-Inference-Demo/c++/cpu/resnet50/resnet50_test.cc内容到main.cc
# 如果编译通过,那就没有问题了

# 最后就是运行了,将前面下载的resnet50的推理模型复制到build-paddleTest-unknown-Debug
# 下面命令运行程序, 和使前面和运行效果一致,表示成功移植
./paddleTest --model_file resnet50/inference.pdmodel --params_file resnet50/inference.pdiparams

到这里已经完成Paddle库和Qt一起使用,但还不够简单,每次加入的头文件和库文件也太多了,每次都要复制出来,太麻烦了。可以将这些文件提取出来放到固定文件,每次只需要加载这个文件就可以了。现成的方案是有的pkg-config,只需要提取出头文件,和库文件,再使用一个xxx.pc文件配置好,每次使用直接像opencv那样加载一下就完成了。库文件可以用前面提到的find . -name "*.so*" | xargs -i cp {} ./paddle_lib方法,这次不只提取.so动态库,.a的静态库也一并提取出来。

# 进入paddle_inference目录
# 提取库文件
cd ~/Downloads/paddle_inference
mkdir paddle_lib
find . -name "*.so*" | xargs -i cp {} ./paddle_lib
find . -name "*.a" | xargs -i cp {} ./paddle_lib

# 复制头文件,因为头文件有结构要求,只能手动提取,注意这里的头文件包含第三方库的头文件
mkdir paddle_include

# 完成后将库文件复制到/usr/lib/
# 将头文件复制到/usr/include/
# 下面就是我复制完成后的头文件内容,包含paddle和第三方库所有头文件

cpu_provider_factory.h     mkl_lapacke.h
crypto                     mkl_lapack.h
cryptopp                   mkl_service.h
dnnl_config.h              mkl_spblas.h
dnnl_debug.h               mkl_trans.h
dnnl.h                     mkl_types.h
dnnl.hpp                   mkl_version.h
dnnl_ocl.h                 mkl_vml_defines.h
dnnl_ocl.hpp               mkl_vml_functions.h
dnnl_sycl.h                mkl_vml.h
dnnl_sycl.hpp              mkl_vml_types.h
dnnl_sycl_types.h          mkl_vsl_defines.h
dnnl_threadpool.h          mkl_vsl_functions.h
dnnl_threadpool.hpp        mkl_vsl.h
dnnl_threadpool_iface.hpp  mkl_vsl_types.h
dnnl_types.h               oneapi
dnnl_version.h             onnxruntime_c_api.h
experimental               onnxruntime_cxx_api.h
gflags                     onnxruntime_cxx_inline.h
glog                       onnxruntime_run_options_config_keys.h
google                     onnxruntime_session_options_config_keys.h
i_malloc.h                 paddle2onnx
internal                   paddle_analysis_config.h
mkl_blas.h                 paddle_api.h
mkl_cblas.h                paddle_infer_contrib.h
mkl_direct_blas.h          paddle_infer_declare.h
mkl_direct_blas_kernels.h  paddle_inference_api.h
mkl_direct_call.h          paddle_mkldnn_quantizer_config.h
mkl_direct_lapack.h        paddle_pass_builder.h
mkl_direct_types.h         paddle_tensor.h
mkl_dnn.h                  provider_options.h
mkl_dnn_types.h            utf8proc.h
mkl.h                      xxhash.h

# 最后库文件和头文件都重命名为paddle
# 完成后可以再次使用Qt的测试项目测试一下,INCLUDEPATH就只添加/usr/include/paddle,LIBS只指定一次-L选项, -l选项保留,如下:
INCLUDEPATH += /usr/include/paddle/

LIBS += -L/usr/lib/paddle
LIBS += -lpaddle_inference
LIBS += -lgflags
LIBS += -lglog
LIBS +=	-lmkldnn
LIBS +=	-liomp5 -lmklml_intel
LIBS +=	-lprotobuf
LIBS +=	-lxxhash
  1. 编写paddle.pc文件

pkg-config可以很方便管理头文件和库文件引用,只需要一个.pc文件。因此可以自己编写一个.pc文件,以后就可以方便的使用pkg-config引用paddle库了。
经过以上提取,paddle所有头文件和第三方头文件我们都放到了/usr/include/paddle中。所有库文件,包含动态库和静态库都放到了/usr/lib/paddle中。

cd /usr
# 查找.pc文件存放位置
find . -iname opencv4.pc
# 找到如下位置
./lib/x86_64-linux-gnu/pkgconfig/opencv4.pc
# 可以照着写一个自己的paddle.pc
# Package Information for pkg-config

prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib/paddle
includedir=${prefix}/include/paddle

Name: Paddle
Description: Open Source Computer Vision Library
Version: 1.0.0
Libs: -L${exec_prefix}/lib/paddle -lpaddle_inference -lgflags -lglog -lmkldnn -liomp5 -lmklml_intel -lprotobuf -lxxhash
Cflags: -I${includedir}

# 完成后看下是否成功
pkg-config --cflags --libs paddle
# 输出如下,如果需要的库不在这里面,可以自己更改paddle.pc增加
-I/usr/include/paddle -L/usr/lib/paddle -lpaddle_inference -lgflags -lglog -lmkldnn -liomp5 -lmklml_intel -lprotobuf -lxxhash

# 进入paddleTest项目直接编译运行,编译通过
g++ -o main main.cc `pkg-config --cflags --libs paddle`
# 复制推理模型到当前目录,运行程序,效果与前面一致

到这里已经完成了paddle.pc文件编写,下面就可以在Qt creator中以2句简单的命令引入paddle库了.

CONFIG += link_pkgconfig
PKGCONFIG += paddle

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1506857.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Spark SQL]Spark SQL读取Kudu,写入Hive

SparkUnit Function:用于获取Spark Session package com.example.unitlimport org.apache.spark.sql.SparkSessionobject SparkUnit {def getLocal(appName: String): SparkSession {SparkSession.builder().appName(appName).master("local[*]").getO…

1.下载安装ESP32开发环境ESP-IDE

ESP32简介 ESP32介绍 说到ESP32,首先ESP32不是一个芯片,ESP32是一个系列芯片, 是乐鑫自主研发的一系列芯片微控制器。它主要的功能就是支持WiFi和蓝牙, ESP32指的是ESP32裸芯片。但是,“ESP32”一词通常指ESP32系列芯…

python基础练习 特殊回文数

资源限制 内存限制:512.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 问题描述 123321是一个非常特殊的数,它从左边读和从右边读是一样的。   输入一个正整数n, 编程求所有这样的…

RocketMQ、Kafka、RabbitMQ 消费原理,顺序消费问题【图文理解】

B站视频地址 文章目录 一、开始二、结果1、RocketMQ 消费关系图1-1、queue和consumer的关系1-2、consumer 和线程的关系 2、Kafka 消费关系图1-1、partitions和consumer的关系1-2、consumer 和线程的关系 3、RabbitMQ 消费关系图1-1、queue和consumer的关系1-2、consumer 和线程…

Python+Django+Html网页前后端指纹信息识别

程序示例精选 PythonDjangoHtml网页前后端指纹信息识别 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对《PythonDjangoHtml网页前后端指纹信息识别》编写代码,代码整洁&#xff0…

深入理解Java多线程与线程池:提升程序性能的利器

✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 🎈🎈作者主页: 喔的嘛呀🎈🎈 目录 引言 一、实现多线程 1.1. 继承Thread类 1.2. 实现Runnab…

WPF(1)的MVVM的数据驱动学习示例

MVVM Model:数据模型、View 界面、ViewModel 业务逻辑处理 项目结构 界面数据绑定 <Window x:Class"WpfApp1.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/x…

opencv人脸识别实战3:多线程和GUI界面设计(PyCharm实现)

一、多线程设计 1、在一个新线程中调用了 scan_face() 函数来进行人脸识别操作。根据识别结果&#xff0c;更新界面显示结果&#xff0c;最后释放资源。 def f_scan_face_thread():var.set(刷脸)ans scan_face()if ans 0:print("最终结果&#xff1a;无法识别")va…

C++ 中的头文件和源文件

#include<>一般用于包含系统头文件&#xff0c;诸如stdlib.h、stdio.h、iostream等&#xff1b; 类库目录下查找失败&#xff0c;编译器会终止查找&#xff0c;直接报错&#xff1a;No such file or directory. #include""一般用于包含自定义头文件&#xff…

NLP 算法实战项目:使用 BERT 进行模型微调,进行文本情感分析

本篇我们使用公开的微博数据集(weibo_senti_100k)进行训练&#xff0c;此数据集已经进行标注&#xff0c;0: 负面情绪&#xff0c;1:正面情绪。数据集共计82718条(包含标题)。如下图&#xff1a; 下面我们使用bert-base-chinese预训练模型进行微调并进行测试。 技术交流&#x…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Gauge)

数据量规图表组件&#xff0c;用于将数据展示为环形图表。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 可以包含单个子组件。 说明&#xff1a; 建议使用文本组件构建当前数值文本和辅…

信息系统项目管理师005:工业互联网(1信息化发展—1.2现代化基础设施—1.2.2工业互联网)

文章目录 1.2.2 工业互联网1.内涵和外延2.平台体系3.融合应用 记忆要点总结 1.2.2 工业互联网 工业互联网(Industrial Internet)是新一代信息通信技术与工业经济深度融合的新型基础设施、应用模式和工业生态&#xff0c;通过对人、机、物、系统等的全面连接&#xff0c;构建起覆…

【EDK II】作为UEFI的实现,EDK II 的架构是什么样的

目录 前言 EDK II 架构 配置文件 结语 前言 基本输入输出系统 (Basic Input Output System, BIOS) 最早由 IBM&#xff08;International Business Machines Corporation) 公司于1981年提出并开发&#xff0c;后来成为个人计算机(PC)的标准固件接口。但受限于传统BIOS (Le…

Git分支管理(IDEA)

文章目录 Git分支管理&#xff08;IDEA&#xff09;1.Git分支管理&#xff08;IDEA&#xff09;1.基本介绍1.分支理解2.示意图 2.搭建分支和合并的环境1.创建Gitee仓库2.创建普通maven项目3.克隆Gitee项目到E:\GiteeRepository4.复制erp文件夹下的内容到IDEA项目下5.IDEA项目中…

Kafka的分区机制

Kafka的分区机制是其核心功能之一&#xff0c;旨在提高可扩展性和并行处理能力。下面概述了Kafka分区的基本概念和工作原理&#xff1a; Kafka分区基本概念 分区&#xff08;Partition&#xff09;&#xff1a;Kafka中的主题&#xff08;Topic&#xff09;可以细分为多个分区…

软件测试APP完整测试作业流程(附流程图),公司级软件测试流程化办公

目录 1. 概述 2. 软件测试流程 3. 软件测试周期人员活动图 4. 总结 1. 概述 1.1 目的 有效的保证软件质量&#xff1b; 有效的制定不同测试类型&#xff08;软件系统测试、音频主观性测试、Field Trial、专项测试、自动化测试、性 能测试、用户体验测试&#xff09;的软件…

【HarmonyOS】ArkUI - 自定义卡片样式

ArkUI - 自定义卡片样式 HarmonyOS API 9 没有提供原生的卡片样式&#xff0c;我定义了一个卡片样式&#xff0c;可以方便大家在日常开发中使用。 效果图&#xff1a; 卡片样式代码如下&#xff1a; Styles function card() {.width(95%).padding(20).backgroundColor(Col…

【CSP】2022-03-2 出行计划 经典差分和前缀和 (包含完整思路、代码和写代码过程中遇到的问题)

2022-03-2 出行计划 差分和前缀和 2022-03-2 出行计划 差分和前缀和思路遇到的问题&#xff08;不小心出现的细节问题&#xff09;完整代码 2022-03-2 出行计划 差分和前缀和 这题很久之前做过一次&#xff0c;现在已经基本忘记了&#xff0c;所以重新做一遍&#xff0c;然后一…

Linux动态追踪——ftrace

目录 摘要 1 初识 1.1 tracefs 1.2 文件描述 2 函数跟踪 2.1 函数的调用栈 2.2 函数调用栈 2.3 函数的子调用 3 事件跟踪 4 简化命令行工具 5 总结 摘要 Linux下有多种动态追踪的机制&#xff0c;常用的有 ftrace、perf、eBPF 等&#xff0c;每种机制适应于不同的场…

银河麒麟V10 安装部署大数据管理软件 DataSophon

一、概览 1、愿景 致力于快速实现部署、管理、监控以及自动化运维大数据云原生平台&#xff0c;帮助您快速构建起稳定、高效、可弹性伸缩的大数据云原生平台。 2、DataSophon是什么 《三体》&#xff0c;这部获世界科幻文学最高奖项雨果奖的作品以惊艳的"硬科幻"…