C++
文章平均质量分 75
清欢守护者
人间有味是清欢
展开
-
在 VS2019 中编译/使用 ZeroMQ
文章目录0. 前言1. libzmq 编译2. cppzmq 编译0. 前言目标:使用 VS2019 编译并使用 ZeroMQZeroMQ 对应的源码分别是 libzmq 和 cppzmq1. libzmq 编译第一步:使用 CMake 打开配置 libzmq第二步:配置 CMake。都用了默认配置,啥都没改,点击 Generate 然后点击 Open Project第三步:通过 VS2019 编译首先,右键选择 ALL_BUILD 然后生成即可然后,右键点击原创 2022-05-22 22:49:50 · 1103 阅读 · 1 评论 -
在 VS2019 中编译/使用 Protobuf
文章目录0. 前言1. VS2019 编译 Protobuf3. VS2019 项目中使用编译好的 Protobuf4. VS2019 的 CMake 项目中引入 Protobuf0. 前言由于对 Windows 和 VS2019 不太熟悉,在编译并使用 Protobuf 的过程中碰到很多问题,虽然没有完全解决,但勉强能用,这里记录一下。目标:使用VS2019编译 ProtobufVS2019 项目中使用编译好的 ProtobufWindows下的 CMake 项目中,引用编译好的 Prot原创 2022-05-21 23:36:37 · 3441 阅读 · 2 评论 -
Windows 中使用 VS2019 开发 CMake 项目
文章目录0. 前言1. 使用 VS2019 编译 SPDLOG2. 在 VS2019 中创建 CMake 项目引入 SPDLOG0. 前言目标:使用 VS2019 构建 CMake 项目,或导入、开发已有 CMake 项目。为什么要这么做?跨平台:目前的项目需要跨平台开发,主力平台是Linux,Windows主要做适配工作。世界上最好的IDE:2010的时候,我就是用VS开发的,现在也算是重操旧业……本文内容:以 SPDLOG 为例,使用 VS2019 编译已有的 CMake 项目原创 2022-05-16 18:08:28 · 7443 阅读 · 0 评论 -
C++ 项目中使用 Pre-commit 协助实现代码规范检查
文章目录0. 前言1. 工具简单介绍1.1 pre-commit 的简单使用1.2 clang-format1.3 cpplint2. 最佳实践2.1 配置文件2.2 安装依赖程序0. 前言多人项目开发需要统一代码规范,为了执行这些代码规范,需要有工具的辅助。目前选择的工具组合式:precommit:在执行 git commit 的时候进行代码检查。具体执行的命令就是通过下面几个工具。clang-format:代码格式检查(formatting工具,只检查格式)cpplint:C++代码静态原创 2022-04-24 10:36:08 · 2413 阅读 · 0 评论 -
VS2019 + OpenVINO 初体验
文章目录0. 前言1. OpenVINO 在 VS2019 中的配置2. OpenVINO 模型推理程序梗概0. 前言目标:在 Windows 上运行 OpenVINO 2021.4 版实现路径:之前打算用 CMake + MinGW + VSCode 的方案在 Windows 下进行 C++ 开发,但在执行 cmake 命令阶段就爆出一个 This Intel TBB package is intended to be used only in the project with MSVC原创 2022-04-18 15:04:54 · 5139 阅读 · 5 评论 -
ROS 使用记录(3) 自定义消息格式
文章目录0. 前言1. 创建 `.msg` 文件2. 构建 pkg 解析 `.msg` 文件3. 在其他 pkg 中使用自定义消息0. 前言ROS 中可通过 publisher/subscriber 和 topic 实现设计模式中的发布-订阅模式。而传递数据的基本数据结构就是message(消息)ROS 中定义了很多消息格式,比如数字、字符串、图片等。然而,在实际开发过程中,往往需要自己定义消息格式。自定义消息的实际使用可分为三个部分第一步:确定数据结构,创建 .msg 文件第二步原创 2021-09-03 11:22:58 · 1102 阅读 · 0 评论 -
ROS 小技巧 - 引用同一工作区中pkg
1. 需求要写的ROS代码比较多,有很多公共功能。希望把公共部分单独作为一个pkg,供同一工作区中的其他pkgs引用。参考:ROS:使用同一工作空间下不同包的头文件2. 实现本质上就是实现两个pkg(记为A与B),假设B引用A。如果只引用A中的头文件(而不是.so lib),那A的实现与普通pkg实现没有太大不同,需要注意的是,在 CMakeLists.txt 中需要catkin_package( # 这一行必须有 # 如果不是别的pkg要调用,下面这行没有也没事,原因原创 2021-09-02 19:47:07 · 334 阅读 · 0 评论 -
ROS 小技巧 - OpenCV4 与 CV_Bridge 配合使用
1. 现象ROS默认的Python版本是3.3,但我系统安装的是OpenCV4.5如果直接在pkg中使用cv_bridge和opencv4.5就会有问题。会有一些undefined reference问题参考资料:ROS 下使用Opencv4.4.0,并且使用cv_bridge转换msgs 与 opencv图像注意,重新编译并不能解决问题kinetic版本下,用OpenCV4.5.0编译cv_bridge失败,原因没细看,感觉上是API改变导致的。2. 解决原创 2021-09-02 19:08:11 · 2550 阅读 · 2 评论 -
ROS 小技巧 - Ctrl+C 退出 ROS 程序
1. 现象在使用 rosrun 启动 ROS 节点的时候,默认情况下使用 ctrl+c 无法退出程序。原因我也不太清楚,可能是 ROS 程序默认接管了所有信号量(ctrl+c就是一个信号量)2. 解决参考资料:官方文档-Initialization and Shutdown自定义信号量处理的函数(代码来自上面的文档)切换行号显示#include <ros/ros.h>#include <signal.h>void mySigintHandler(i原创 2021-09-02 12:30:24 · 6317 阅读 · 1 评论 -
ROS 小技巧 - VSCode 中设置 ROS 编译环境
1. 编译环境目标:在VSCode写代码时,能够正常解析ROS相关头文件,并跳转。流程第一步:在执行 catkin_make 的时候指定参数 -DCMAKE_EXPORT_COMPILE_COMMANDS=Yes第二步:在 c_cpp_properties.json 中添加 "compileCommands": "${workspaceFolder}/build/compile_commands.json"如果还是不能跳转,记得吧 build/devel 删了重来2. 运行环原创 2021-09-02 10:55:14 · 584 阅读 · 2 评论 -
ROS 使用记录(2) 日志系统与roslaunch
文章目录0. 前言1. 日志系统2. roslaunch0. 前言本文主要内容:ROS 中自带了日志系统,本文简单学习一下基本使用。ROS 中启动节点的主要方法就是 roslaunch,需要仔细学习一下用法。参考资料:官方文档-roscpp/Overview/Logging官方文档-rosconsole官方文档-roslaunch官方文档-roslaunch/XML官方文档-Roslaunch tips for large projectslaunch文件中param、ros原创 2021-09-02 10:26:43 · 2581 阅读 · 0 评论 -
侯捷 C++面向对象开发 (1) 面向过程
文章目录0. 前言第二课 - 头文件与类的声明第三课-构造函数第四课-函数传递与返回值第五课-操作符重载与临时对象第六课-复习Complex类的实现过程第七课-拷贝构造,构造复制,析构第八课-堆,栈与内存管理第九课-复习String类的实现过程第十课-扩展补充:类模版,函数模版,及其他0. 前言侯捷大佬所有C++课程之一全部课程参考这里本文对应的课程: 面向过程包括第二课到第十课,相关内容主要是以实现 Complex 类与 String 类为目标介绍了类创建的基本语法、思路原创 2021-09-01 23:48:56 · 268 阅读 · 0 评论 -
ROS 使用记录(1) ROS安装以及项目构建与运行
文章目录0. 前言1. ROS 安装2. Hello World 程序2.1 创建工作区2.2 创建 package2.3 编译 package2.4 运行 package0. 前言为了将深度学习模型部署到ROS系统中,接下去一段时间会学习很多ROS相关的内容,希望通过一段时间的学习,能达到侯捷老师说的“心中自有丘壑”。本文内容:ROS 的安装ROS 项目的构建与 hello world 项目的运行1. ROS 安装参考资料英文文档,中文文档ROS 的版本原创 2021-08-31 18:21:10 · 775 阅读 · 0 评论 -
GoogleTest 入门(1) 官网文档浏览
文章目录0. 前言1. Getting Started2 Googletest Primer0. 前言要转型成为C++工程师,要走的路还很长啊……最近写了不少C++代码和项目,单元测试都是自己随便写写,不成体系,希望能够了解下业界的写法,自己也学一学。单元测试框架好像没有什么悬念,就是googletest了。官方资料阅读官方资料:Github,文档GooglgTest是由之前两个项目 GoogleTest 和 GoogleMock 组成,所以在文档中,基本上也可以分为 Goo原创 2021-07-05 18:05:16 · 2079 阅读 · 3 评论 -
GoogleTest 入门(2) CMake 项目中引入 GTest
文章目录0. 前言1. 方式一:完全不使用CMake特殊语法2. 方式二:ctest3. 方式三:find_package4. 方式四:使用 CMake 中 GTest 相关的特殊语法0. 前言场景很简单:自己的项目中创建了一系列单元测试,如何引入 GTest,如何执行测试。准备工作:git clone https://github.com/google/googletest.gitcd googletestmkdir build && cd build &&原创 2021-07-05 18:04:22 · 7715 阅读 · 0 评论 -
C++ 日志工具 spdlog 简单实用
文章目录0. 前言1. 安装与引入1.1 安装1.2 其他项目中引入2. 使用2.1 构建logger2.2 设置日志等级2.3 自定义日志输出格式2.4 注册与获取2.5 输出日志3. 其他0. 前言参考资料:官网wiki就够用了1. 安装与引入1.1 安装因为spdloggit clone https://github.com/gabime/spdlog.gitcd spdlog && mkdir build && cd buildcmake .原创 2021-07-05 01:34:18 · 2138 阅读 · 0 评论 -
C++ 日志工具 glog 简单实用
文章目录0. 前言1. 安装与 CMake 导入2. 源码修改2.1 初始化0. 前言参考资料Gihub-README 基本就够了(有个翻译)选择 glog 的主要原因在于好像其他库用得比较多。根据查到的资料看,glog 的速度较慢(参考这里)。1. 安装与 CMake 导入安装:实用的 0.5.0 版本使用 cmake 构建# wget https://github.com/google/glog/archive/refs/tags/v0.5.0.tar.gz原创 2021-05-20 16:29:03 · 1389 阅读 · 0 评论 -
C++ 性能分析工具调研
文章目录0. 前言1. gprof3. valgrind4. gperftools5. perf0. 前言目标:性能分析(profile)包含的内容特别多,但目前我只关注运行时间。详细要求:最终也没找到合适的(需要每个函数的平均运行时间),看来还是需要手写记录。参考资料PPT - C/C++调试、跟踪及性能分析工具综述:介绍了一些常用性能分析工具。How can I profile C++ code running on Linux?:很多很好的回答,建议把高赞的都看一遍,特别是这原创 2021-05-20 15:16:40 · 5688 阅读 · 0 评论 -
PyTorch C++ 官方教程摘要(1) Using the PyTorch C++ Frontend
文章目录0. 前言1. 为什么要用C++2. DCGAN PyTorch C++ 示例2.1. 使用基本流程2.2. 网络结构定义0. 前言PyTorch官方教程中有一些C++相关的内容。今天要学习的主要是 Using The Pytorch C++ Frontend本文主要内容包括:为什么要用C++以DCGAN为例实现功能1. 为什么要用C++其实就是相比Python,C++的优势。C++前端的目标不是替代Python前端,而是补充。Low Latency Syste原创 2021-03-01 14:05:48 · 407 阅读 · 0 评论 -
TensorRT 入门(3) 官方样例 sampleOnnxMNIST
文章目录0. 前言1. ONNX 模型转换1.1. build 函数详解0. 前言本文提到的sampleMNISTAPI与之前0. 前言本文提到的sampleMNISTAPI与之前笔记1和笔记2提到的样例有完全相同的输入与输出,不同之处在于模型创建方式不一样。sampleMNIST通过导入一个caffe模型并将caffe模型转换为tensorrt的形式。sampleMNISTAPI通过TensorRT的C++接口直接一层一层搭建模型,并将caffe中的权重导入创建好的网络中。sample原创 2021-02-05 18:29:17 · 1114 阅读 · 1 评论 -
TensorRT 入门(2) 官方样例 sampleMNISTAPI
文章目录0. 前言1. TensoRT C++ 构建网络1.1. 对象定义1.2. 建立网络2. 其他相关代码2.1. 读取命令行参数2.2. logger 相关0. 前言本文提到的sampleMNISTAPI与之前笔记提到的sampleMNIST有完全相同的输入与输出,不同之处在于模型创建方式不一样。sampleMNIST通过导入一个caffe模型并将caffe模型转换为tensorrt的形式。sampleMNISTAPI通过TensorRT的C++接口直接一层一层搭建模型,并将caffe中的原创 2021-02-05 17:16:57 · 778 阅读 · 0 评论 -
Inside MNN(1) 安装与第一个样例
文章目录0. 前言1. 安装2. 第一个样例2.1. 图像分类Demo运行2.2. 图像分类Demo源码分析0. 前言目标:安装MNN并运行Demo。1. 安装参考资料:所有安装选项可以在官网中找到。要安装什么?默认情况下只会编译推理相关代码其他功能(比如训练、模型转换、Demo、评估工具、量化工具、多线程)都需要手动开启。安装具体步骤:下载源码:git clone https://github.com/alibaba/MNN.git其他准备工作:./schema/ge原创 2020-11-25 11:40:49 · 349 阅读 · 0 评论 -
cmake Tutorial 摘要(1) Step1-6
文章目录0. 前言Step 1 - A Basic Starting Point1.1. 基本功能1.2. 添加版本号1.3. 设置C++标准Step 2 - Adding a Library2.1. 基本功能2.2. 其他功能Step 3 - Adding Usage Requirements for LibraryStep 4 - Installing and Testing4.1. install4.2. TestingStep 5 - Adding System Introspection5.1.原创 2020-09-02 15:16:49 · 189 阅读 · 0 评论 -
《Cmake 实践》摘要
文章目录前言第三章 初试cmake3.1. 源码3.2. 基本操作流程3.3. CMakeLists.txt 文件的解释3.4. 基本语法规则3.5. 内部构建与外部构建第四章 更好一点的Hello World4.1. 源码4.2. 目标以及源码解释4.3. INSTALL 命令详解第五章 静态库与动态库构建5.1. 源码5.2. ADD_LIBRARY & SET_TARGET_PROPERTIES 解析第六章 如何使用外部共享库和头文件6.1. 源码6.2. `INCLUDE_DIRECTORI原创 2020-08-31 11:42:33 · 134 阅读 · 0 评论 -
TensorRT 入门(1) 安装以及第一个样例sampleMNIST
文章目录0. 前言1. 运行过程1.1. 数据准备1.2. 代码编译与运行2. 源码解析2.1. 基本概念2.2. 主函数2.3. 将caffe模型转换为TensorRT可识别的形式2.4. 模型推理0. 前言目标:在根据官方文档安装完后尝试测试一下TensorRT是否安装成功。代码可以在 samples/sampleMNIST 中找到,也可以看 github 中对应路径。TODO:进一步理解模型推理过程中的 stream/buffer/context 等变量的含义。1. 运行过程以下过原创 2020-07-06 19:11:10 · 3746 阅读 · 2 评论 -
《跟我一起写Makefile》摘要 1-3
文章目录0. 前言1. 概述1.1. Makefile 基本介绍1.2. C++程序的编译与链接2. makefile介绍2.1. makefile基本规则与举例2.2. make的工作流程2.3. makefile中使用变量2.4. make自动推导依赖关系2.5. 合并依赖项2.6. 清空目标文件规则2.7. makefile里有什么2.8. Makefile 文件名2.9. 引用其它的Makefile2.10 环境变量MAKEFILES2.11 make的工作方式3. 书写规则3.1. 概述3.2.原创 2020-06-20 16:17:09 · 238 阅读 · 0 评论