自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(68)
  • 收藏
  • 关注

原创 基于CentOS更新 glibc - 解决 `GLIBC_2.29‘ not found

前面使用源代码安装参考了 GNU C 的官方文档,文档的描述很详细,但是没有说明更新后不能使用的情况。使用 rpm 包很考验耐心,最后还是会因为包之间相互依赖而导致问题,真的很烦。

2022-11-06 19:37:43 18357 6

原创 SPD5详解

SPD(serial presence detect),即串行存在检测,是DIMM的相关描述信息。在每根内存条上,都有一份SPD数据,这份数据保存在一个可擦写的eeprom芯片中。SPD数据记录了该内存的许多重要信息,诸如内存的芯片及模组厂商、工作频率、工作电压、速度、容量、电压与行、列地址带宽等参数。SPD数据一般都是在出厂前,由DIMM制造商根据内存芯片的实际性能写入到eeprom芯片中。

2022-09-25 15:01:38 8113 1

原创 C语言处理参数的 getopt() 函数

getopt() 函数用于解析命令行参数。它的 argc 和 argv 参数通常直接从 main() 的参数直接传递而来。optstring 是可以处理选项字母组成的字符串。该字串里的每个字符对应于一个以 ‘-’ 开头的选项。如果该字串里的任一字符后面有冒号,那么这个选项就要求有参数(如“hd:”对应于 '-h' 和 '-d', 其中 '-d' 后需接参数)。而如果选项后面接两个冒号,则说明这个选项后的参数是可选的,即可带参数也可不带参数。

2022-09-14 09:29:05 5302

原创 cmake(14):利用set_property命令设置全局属性

在开发过程碰到需要在上级目录中构建,而源代码又分别写在下级目录的情况,同时又要根据不同的情况选择性地添加不同的源代码进行编译,所以考虑将需要编译的源代码放到一个cmake列表中。...

2022-07-29 13:40:15 7178

原创 cmake(13):构建时设置预处理宏定义以及add_compile_definitions命令详解

说明了如何使用 cmake 在构建时选择性自定义宏

2022-07-07 09:18:46 18795

原创 Ubuntu:编译升级Linux内核

基于Ubuntu20.04系统更新内核

2022-07-01 08:42:10 2268

原创 git tag 操作

本文章详细解释了 git tag 相关的操作

2022-05-28 09:55:39 1079

原创 使用git对代码进行打包的方法

1. 说明通常我在发布代码的时候会先打tag,然后下载该tag进行发布。实际上tag更多的是用于标记版本以方便管理,git提供了多个打包代码的命令帮助用户发布代码。2. 打包分支代码使用 git archive 可以将指定分支的代码进行打包,支持.zip, .tar 和 .tar.gz 格式的代码包,使用这个命令打包的代码只包含当前版本的代码,像log信息之类的并不包含,也不能在目录下使用git 相关的命令。比如打包 master 分支:git archive master -

2022-05-19 10:08:07 11294

原创 搭建 GitServer 及日常管理

目录1. 说明2. 搭建Server2.1 安装依赖软件2.2 打开相应服务2.3 安装 gitlab 包2.4 配置 gitlab2.5 重置 gitlab2.6 启动 gitlab3. 服务器管理3.1 项目备份和迁移3.2 搭建 gitlab-runner1. 说明因工作需要,领导要求在实验室内搭建一台GitServer供组内成员管理代码使用。因此基于一台PC使用centos7.6系统搭建一台该类型服务器。该类型服务器最小要求内存为4GB,我这边

2022-05-18 14:36:31 3276

原创 Boost(9):使用Boost.Python实现 C++ 和 Python 混合编程

本文章描述如何使用Boost.Python库在C++代码中嵌入Python程序

2022-05-15 09:29:24 3498 1

原创 Boost(8):Boost.Python 实现 Python 对象以及各种类型的内置操作和方法

说明Python 有多种非常好用的数据类型,如 Numbers,String,List,Tuple,Dictionary 和 Set。在前面的示例中我们经常用到的 Numbers 和 String(它们的内容) 可以直接在 C++ 代码中使用,因为这两者也是 C++ 的数据类型(虽然实现上不同,但不妨碍两者通用)。但是其他类型的数据结构在 C++ 中并没有,那么当 Python 需要使用这些类型且与 C++ 代码有交互时,该如何处理呢?在 Boost.Python 和 C++ 的观点中,这些 Pytho

2022-05-09 21:57:38 2863

原创 Boost(7):Boost.Python封装重载函数和传递默认参数

本文介绍了在使用 Boost.Python 库将 C++ 函数转换为 Python 接口时,如何处理重载函数和默认参数。

2022-05-02 18:52:40 1874

原创 Boost(6):Boost.Python 如何转换 C++ 的参数和返回值类型

详述使用Boost.Python转换C++的参数和返回值到Python

2022-04-27 12:02:19 1304

原创 Ubuntu:与Windows共享文件夹

1. 说明我个人更喜欢在windows下编辑代码或文档,而运行环境又经常在Linux环境下进行,那么Windows和Linux之间的协作就显得很有必要了。通常有两种方式来实现两个系统之间的文件共享:在Linux下访问运行Windows系统的代码和在Windows环境下编辑Linux系统内的代码。下面以Ubuntu16.04/18.04/20.04系统和Win7/8/10为例说明这如何进行操作。2. Ubuntu访问Windows共享文件夹2.1 Windows 下设置共享文件夹对需要共享文

2022-04-17 10:46:30 34639 6

原创 Ubuntu:添加串口输出信息

1. 说明好久没有更新博客了,最近实在太忙且人太懒,先拿一个简单的笔记糊弄一下下~~~通过串口输出系统启动信息。验证系统:Ubuntu20.042. 操作添加启动参数到引导配置文件sudo vim /etc/default/grubGRUB_DEFAULT=0GRUB_TIMEOUT_STYLE=hiddenGRUB_TIMEOUT=0GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`# GRUB_C

2022-03-16 10:02:10 1610

原创 cmake(12):使用cpack生成DEB二进制文件

说明我之前习惯了直接Release源代码,然后在目标平台上编译运行的方式,但是有些项目要求将软件打包成安装包的形式发布,所以这里专门学习一下如何使用cpack(因为我现在主要使用cmake来构建项目)将工程打包成安装包和源代码包。CPack概述cpack是CMake的一个可执行文件,安装CMake后可以直接输入cpack命令,该命令是CMake提供的一个打包程序,它可以生成多种格式的二进制包和源代码包。CPack 在整个 CMake 工具链的位置如下:cpack会针对每种安装程序或package产

2022-02-08 08:54:12 2128

原创 Boost(5):从python object提取c++语言的类型以及extract类详解

前言python和c++之间数据类型的差别是进行转换时经常碰到的问题,有些简单的数据类型可以通用,但还有很多中类型则无法直接使用。在碰到这类问题时,boost.python提供的extract类是一个很方便的解决方案。这篇内容用于记录我在使用中对extract的理解。1. 说明1.1 Extract介绍Extract是Boost.Python中用来从Python对象中提取c++对象的类,通过这个类我们可以将一些Python的对象转换成C++语言的对象。如将 boost::python::str类型

2022-01-18 16:03:17 1460

原创 Boost(4):boost::noncopyable类详解

这篇文章详细介绍了boost::noncopyable类的实现以及提供了示例说明。

2022-01-12 23:02:00 1543

原创 Boost(3):将c++类封装成python类

简单介绍了如何使用Boost.Python将c++语言的class及其成员变量和成员函数封装成python语言课调用的实例。

2022-01-09 15:57:51 3927

原创 Boost(2):boost.python库介绍及简单示例

1. boost.python介绍将c/c++的函数接口转换为Python接口有好几种解决方案,不同于C语言的简单直接,C++因使用了大量的面向对象编程的思想导致转换为Python接口时相对比较复杂,boost.python的目标就是为了简单方便地将C++程序转换成Python的接口。BoostPython库是boost c++库的其中一个子库,使用它可以轻松地将C++的函数接口转换成Python接口。在大部分情况下你不需要对原先的C++代码做任何修改,boost.python会对C++类再做一层封装,

2022-01-05 18:31:07 9508

原创 Boost(1):Boost库简介及安装

1. Boost库介绍Boost是一个功能强大、构造精巧、跨平台、开源并且完全免费的C++程序库,在1998年由Beman G.Dawes发起倡议并建立。使用了许多现代C++编程技术,内容涵盖字符串处理、正则表达式、容器与数据结构、并发编程、函数式编程、泛型编程、设计模式实现等许多领域,极大地丰富了C++的功能和表现力,能够使C++软件开发更加简洁、优雅、灵活和高效。Boost库可以与C++标准库完美共同工作,并且为其提供扩展功能。大部分Boost库功能的使用之需要包括相应的头文件即可,少数需要连接库。

2022-01-02 14:56:31 17339 4

原创 cmake(11):将可执行和库文件分别输出到指定目录

1. 说明当一个工程编译后包含多个可执行和库文件,将这些文件分别放置在对应的目录里面会使得工程看起来更有序…(当然,这些都是我编的,毕竟要给自己找个理由)这篇笔记用于记录如何使用cmake在编译后将库文件和可执行文件生成在指定目录。2. 示例仍然以之前的代码为例。在主CMakeLists.txt文件中设置目录路径# 设置静态库文件目录set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)# 动态库文件目录set(CMAKE

2021-12-13 17:02:44 10551

原创 cmake(10):使用cmake编译linux驱动或内核模块

1. 说明这篇笔记用于说明如何使用cmake构建Linux驱动,这样可以方便地将driver和app作为一个整体统一构建。2. 示例首先来看一个代码示例,为了简化起见,我直接在驱动目录下进行构建而没有作为子目录添加到软件工程内。cmake_minimum_required (VERSION 3.0.0)project(driver_demo)# 由于我的系统更新过内核,所以这里需要设置内核源代码路径set(KDIR /home/linux/linux-5.12)# 定义编译函数/方法,

2021-08-03 16:12:37 5687 1

原创 进程管理(2):内核启动之前的引导流程

1. 说明切确地说,Linux内核启动之前的过程并不属于Linux进程管理的部分,但是了解这部分内容对于从全局上学习操作系统也是很有帮助的,所以我把这部分内容也放在了Linux进程管理的分类里面,作为整个故事的起源,可以更好地帮助我梳理整个Linux进程启动到消亡的过程。本篇笔记涉及到grub,BIOS等内容本身也是十分复杂和庞大的软件,但是不属于我准备研究的重点,所以对这些内容只是作个宽泛地说明,了解个大概就好,后续如果有机会再专门研究看看吧。注:文中的启动流程基于Linux v5.12版本和x8

2021-05-22 23:02:06 497 1

转载 机器学习(2):马尔可夫决策过程

1. 马尔可夫决策过程关于马尔可夫决策过程的马尔可夫是什么?马尔可夫是安德烈·马尔科夫(Andrey Markov),​​他是著名的俄罗斯数学家,以其在随机过程中的工作而闻名。“马尔可夫”通常意味着在当前状态下,未来和过去是独立的。建立Markovian系统的关键思想是无记忆。无记忆是系统历史不会影响当前状态的想法。用概率表示法,无记忆性转化为这种情况。考虑一系列动作产生的轨迹,我们正在寻找当前动作将带给我们的位置。长的条件概率可能看起来像:现在如果系统是Markovian,则历史将全部包含在

2021-04-19 09:39:56 1042

原创 机器学习(1):机器学习概述

1. 什么是机器学习机器学习是关于计算机基于数据构建概率模型并运用模型对数据进行预测与分析的一门学科。也成为统计学习。机器学习的研究对象是数据,用于对数据的预测与分析,特别是对未知新数据的预测与分析。机器学习的方法机器学习方法可以概括为:从给定的、有限的、用于学习的训练数据集合出发,假设数据是独立同分布产生的;并且假设要学习的模型属于某个函数的集合,称为假设空间;应用某个评价准则,从假设空间中选取一个最优模型,使它对已知的训练数据及未知的测试数据在给定的评价准则下有最优的预测;最优模型的选取由算法实

2021-04-19 09:37:59 1184

原创 进程管理(1):task_struct结构体说明

本篇笔记详细讲述task_struct结构体的基本内容,涉及的代码基于Linux5.9.8版本。1. 进程和线程关于进程和线程的概念,这里不赘述。需要了解的是在Linux内核中,进程通常被叫做任务,所以进程控制块(PCB)也被命名为struct task_struct。而Linux中是没有明确的线程的概念的,被称为轻量级进程,和进程使用相同的PCB结构,内核使用clone()来创建线程。进程和线程的区别在于进程拥有独立的资源空间,而线程则共享进程的资源空间,通常一个进程可以拥有多个线程。2. tas

2021-04-19 09:31:19 4519

原创 Faiss(17):IndexIVFPQ文件格式分析

1. 说明Faiss版本:1.6.3nb = 1M, nlist = 4000, d = 64, m = 64, nbits = 82. 应用层接口python接口#将生成的index实例保存到index_name.bin命名的文件中faiss.write_index(index, "index_name.bin")c++接口在C++代码中,write_index()函数是一个在faiss命名空间下的独立的函数,即它不依赖于某个特定的类实例,而在代码中可直接调用。如://demo.c

2021-01-27 11:08:22 1672 3

原创 Ubuntu:添加及删除用户

适配系统基于Ubuntu18.04添加用户以用户jack为例1. 创建用户帐号sudo useradd -r -m -s /bin/bash jack-r:建立系统账号-m:自动建立用户的登入目录-s:指定用户登入后所使用的shell如果只用useradd命令而不加参数,在18.04下默认不会自动添加用户目录。如果没有虽然创建的用户能通过shell切换,但会有许多问题。2. 设置新用户密码sudo passwd jack3. 添加用户的sudoer权限sudo chmod

2021-01-19 18:08:16 580

原创 设计模式(4):生成器模式(Builder)

1. 说明什么是生成器模式生成器模式是创建型模式的一种,指使用多个实例通过一定的步骤来生成所需的类的实例,这里的步骤是相同的,但是通过传递不同的参数来达到生成不同实例的目的。意图将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。使用的场合在以下情况使用Builder模式:当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时;当构造过程必须允许被构造的对象有不同的表示时。效果它使你可以改变一个产品的内部表示。Builder对象提供给导向器一个构造

2021-01-18 13:27:26 1592

原创 cmake(9):包含指定目录的头文件

1. 说明在编译程序时,如果需要用到外部的头文件,而该头文件又没有被添加到系统默认的路径中(如:/usr/include,/usr/local/include和/usr/lib/gcc-lib/i386-linux/2.95.2/includ等)时,可以通过cmake的include_directories命令将该头文件添加进编译系统。include_directories()命令该命令将指定目录添加到编译器用于搜索包含头文件的目录路径中去。即相当于gcc编译时的"-I" 命令。当目标头文件不在编译器

2021-01-04 14:43:59 16652 1

原创 设计模式(3):抽象工厂模式(Abstract Factory)

1. 说明从名称就可以看出来,这个模式与工厂模式肯定有非常大的联系,事实上也确实如此。在工厂模式的示例中看到不同种类的产品会有对应的不同的工厂类,应用程序在使用这些类时要分别创建一个该类的实例,在有很多产品类别的情况下,开放给应用程序的接口也会过多,这在统一接口时会造成一些不必要的麻烦。而抽象工厂模式就针对这种情况,对工厂类再进行了另一层封装,使得即使有多种不同类的产品,暴露给应用程序的接口仍然只有一个。2. 抽象工厂模式说明什么是抽象工厂模式抽象工厂模式同工厂模式一样也属于创建型模式,它在工厂模

2020-12-29 19:22:08 234

原创 设计模式(2):工厂模式(Factory Method)

1. 说明关于设计模式的说明和解释主要是学习的《设计模式 可复用面向对象软件的基础》一书,代码示例则主要是来自于设计模式|菜鸟教程网站,将该网站中原有的java示例改写成c++基础的代码,用以加深自己的理解,方便学习之用。看官们也可直接参考这两个来源。2. 工厂模式说明什么是工厂模式工厂模式是创建型模式的一种,它通过一个抽象的通用接口屏蔽了具体类的实现细节,这样在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。意图定义一个用于创建对象的接口,让子类决定实例化

2020-12-28 14:24:10 224

原创 Ubuntu(3):上电后进入initramfs界面

1. 系统环境系统版本:Ubuntu16.04内核版本:3.102. 现象开机上电后,进入到字符界面,显示 “fsck exited with status code 4”fsck exited with status code 4(initramfs)3. 原因Ubuntu开机的时候会check磁盘,如果check fail,会提示sdax check fail(sdax为sda0 、sda1等等)。这是因为关机不当导致磁盘内的数据损坏。4. 解决方法fsck -y /dev/sd

2020-12-23 09:46:08 744

原创 OpenVINO(5):编译DLDT应用程序示例

1. 说明在OpenVINO支持的各个硬件中,CPU、GPU等都是开源的,所以拿到源代码之后可以直接在本地进行编译和安装。因为我使用的平台没有GPU等其他外设,所以这里以CPU为例。1.1 环境硬件Intel SkyLake平台Intel® Xeon® 系列CPU软件Ubuntu18.04GCC 7.3Cmake 3.10.2python 3.7.12. 编译过程2.1 编译DLDT推理引擎下载源代码因为源代码中包含其他项目的第三方源代码,直接下载这些代码会为空,所以建议直

2020-11-25 10:29:10 591

原创 OpenVINO(4):Intel DLDT介绍

1. 部署挑战将深度学习网络从培训环境部署到嵌入式平台进行推理可能是一项复杂的任务,它带来了许多必须解决的技术挑战:行业内有许多广泛使用的深度学习框架,如:Caffe, TensorFlow, MXNet, Kaldi等。通常,深度学习网络的训练在数据中心或服务器群中执行,而推理可能在嵌入式平台上进行,针对性能和功耗进行了优化。这些平台通常受限于软件(编程语言,第三方依赖,内存消耗,支持的操作系统),和硬件(不同的数据类型,有限的功率范围),因此通常不推荐(有时甚至不可能) 使用原始训练框架进行推理

2020-11-24 12:00:05 1318

原创 OpenVINO(3):各个组件分析

1. 说明最初的时候对OpenVINO完全陌生,在Github上搜索也有一大堆令人眼花缭乱的东西,甚至于OpenVINO的源代码是哪个,YOLO-OpenVINO和OpenVINO-YOLOv3有什么区别都不知道。直到这两天慢慢接触了之后才有所了解,特地在此记录一下。2. OpenVINO的组件从Intel的官方文档了解到,OpenVINO工具包包含下列组件:DLDT (Deep Learning Deployment Toolkit)深度学习部署工具包,是OpenVINO的核心,也是我要研

2020-11-24 11:16:10 681

原创 OpenVINO(2):Linux环境下安装并配置OpenVINO

1. 说明根据Intel的官方文档,OpenVINO长期支持Ubuntu16.04 x64(最低内核为4.14),我手上正好有一个已安装好的Ubuntu18.04(4.15),就直接使用这一个操作系统进行安装。硬件:Intel Xeon CPU软件:Ubuntu18.04python3.6.7gcc 8.2.02. 安装2.1 下载安装包OpenVINO toolkit下载网址:https://software.intel.com/en-us/openvino-toolkit/choo

2020-11-20 16:52:37 3375 4

原创 OpenVINO(1):概述

1. 背景当下,人工智能(AI)进入到快速发展阶段,而AI技术落地应用最广的计算机视觉领域也随之日益成熟,行业对于AI人才的需求呈现出了爆炸式增长。除此之外,如何将AI研发置于实际应用场景之中,更好地对AI算法进行优化,加速AI应用落地,也是行业对AI开发者提出的新要求。为帮助开发者加速深度学习模型推理,进一步推动计算机视觉算法在实际问题中的应用,促进产业界与学术界的深度融合,英特尔提供的OpenVINO工具包能有效地缩短开发周期,提升开发效率。2. 概述2.1 什么是OpenVINO工具包Op

2020-11-20 16:35:19 1159

原创 Ubuntu18.04基于gcc7.3.0安装Nvidia显卡驱动

1. 说明由于项目要求,现在需要将原有的Ubuntu16.04升级到Ubuntu18.04,并重新搭建开发环境。大部分内容都可以直接按照原有的方式去操作,但是由于我使用时Ubuntu18.04已经更新源,默认的gcc版本由7.3升级到了7.5,而安装Nvidia显卡驱动时,要求编译器版本需与编译操作系统内核的版本一致(即gcc-7.3.0),费了半天劲才搞好这个问题,所以在这里特地记录一下。1.1 错误记录主要报错内容如下:The CC version check failed:The kern

2020-11-12 12:18:47 2973 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除