C/C++
文章平均质量分 59
踏莎行hyx
疏影横斜水清浅,暗香浮动月黄昏。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
开源C++智能语音识别库whisper.cpp开发使用入门
whisper.cpp是一个C++编写的轻量级开源智能语音识别库,是基于openai的开源python智能语音模型whisper的移植版本,依赖项少,内存占用低,性能更优,方便作为依赖库集成的到应用程序中提供语音识别功能。以下基于whisper.cpp的源码利用C++ api来开发实例demo演示读取本地音频文件并转成文字。原创 2023-11-28 15:20:03 · 4843 阅读 · 0 评论 -
开源大模型框架llama.cpp使用C++ api开发入门
是一个C++编写的轻量级开源类AIGC大模型框架,可以支持在消费级普通设备上本地部署运行大模型,以及作为依赖库集成的到应用程序中提供类GPT的功能。以下基于llama.cpp的源码利用C++ api来开发实例demo演示加载本地模型文件并提供GPT文本生成。原创 2023-11-24 17:53:28 · 4989 阅读 · 1 评论 -
应用Rust思维编写C++代码,提高内存安全和线程安全
C++作为一种高性能的编程语言,在系统级编程、游戏开发、嵌入式系统等领域有着广泛的应用。然而,C++的内存管理机制和线程安全性一直是开发者面临的主要挑战。Rust作为一种新兴的系统级编程语言,以其卓越的内存安全性和并发处理能力而闻名。本文将探讨如何应用Rust的思维在C++中编程,以保障内存安全和线程安全,补足C++在这方面的短板。原创 2025-02-07 10:53:27 · 1016 阅读 · 0 评论 -
C++23新特性
C++23 是由 C++ 标准委员会最新发布的标准,旨在进一步提升 C++ 语言的功能和开发效率。作为一项重要的编程语言标准更新,C++23 引入了多个关键的新特性和改进,使开发者能够编写更高效、简洁和安全的代码。与 C++20 相比,C++23 的变化虽然没有那么显著,但依然对语言的稳固性和可用性做出了许多重要改进。C++20 引入了大量新特性,如模块、协程、概念等,极大地丰富了 C++ 的语法和功能。而 C++23 则在这些基础上进行了补充和优化,解决了一些细节问题,并引入了新的编程工具和方法。转载 2025-02-06 18:08:55 · 301 阅读 · 0 评论 -
在C++程序中嵌入quickjs实现C++和javascript互相调用
quickjs是一个C++实现的轻量级javascript解析引擎,可以嵌入到C++程序中,实现C++和js代码的交互。以下基于这一社区分支实现样例代码演示利用quickjs编写程序进行C++和js互相调用,支持linux和windows。基本原理为基于这样的机制,就可以做到在C++的程序框架中C++与js双向交互,实现很多纯C++或者纯js达不到的效果,例如代码热更新以及安全隔离,这种机制目前其实在金融数据分析系统和游戏引擎中广泛使用。原创 2024-07-01 21:48:54 · 3030 阅读 · 0 评论 -
C++利用SIGSEGV信号处理实现发生segment fault后不崩溃的代码
C++代码发生段错误后系统会抛出SIGSEGV 信号 ,之后 调用默认的信号处理函数 ,产生core文件 ,然后关闭程序。让程序不挂掉的办法就是捕获这个中断信号,调用自定义的信号处理函数,并且叠加一些代码跳转的方法。这里展示了一种方法。这里用到两个函数sigsetjmp和siglongjmp,前者会保存当前的信号屏蔽表 (signal mask),后者跳转的时候会恢复线程的屏蔽表。有效的做法是在发生段错误的代码之前保存程序执行上下文,信号捕捉后通过跳转函数直接跳过段错误的代码,从而达到程序继续执行的目的。原创 2024-06-28 18:03:58 · 995 阅读 · 0 评论 -
开源C++版AI画图大模型框架stable-diffusion.cpp开发使用初体验
是一个C++编写的轻量级开源类AIGC大模型框架,可以支持在消费级普通设备上本地部署运行大模型进行AI画图,以及作为依赖库集成的到应用程序中提供类似于网页版stable-diffusion的功能。以下基于stable-diffusion.cpp的源码利用C++ api来开发实例demo演示加载本地模型文件输入提示词生成画图,这里采用显卡CUDA加速计算,如果没有显卡也可以直接使用CPU。不过,如果没有支持CUDA的显卡,默认采用CPU计算,则可以忽略以上两项。原创 2024-06-22 22:20:43 · 1345 阅读 · 0 评论 -
C++开源搜索引擎xapian开发入门
开源搜索引擎框架和产品有很多,例如elasticsearch,sphinx,xapian,lucence,typesense,MeiliSearch 等,分别用不同的语言实现,具有类似但不完全相同的功能。准确来说不属于通用的搜索引擎,而是属于一种基于索引的文字检索系统。考虑到方便将这种检索系统通过代码开发的形式集成到自己的项目种,而不是单独部署一个完整的系统使用,这里推荐使用C++语言编写的,作为依赖库的形式,调用C++ api在工程中使用。原创 2023-06-29 18:26:01 · 1601 阅读 · 0 评论 -
C++轻量级跨平台桌面GUI库FLTK的简单使用
C++的跨平台桌面GUI库有很多,大体上分成两种流派:retained mode和retained mode。以下是一个使用FLTK开发的简单demo代码示例,功能是显示一个编辑框和一个按钮,点击按钮刷新编辑框的数字。但如果在开发小工具项目,要求跨平台、开源免费、协议友好、性能高、轻量级的需求,这里推荐FLTK库(使用这些框架都支持构建在windows、mac、linux上面能运行的桌面图形界面程序。),只需要作为一个依赖库的方式引入工程即可。原创 2023-06-07 18:08:50 · 3887 阅读 · 0 评论 -
pytorch导出模型并使用onnxruntime C++部署加载模型推理
机器学习的框架众多,为了方便复用和统一后端模型部署推理,业界主流都在采用onnx格式的模型,支持pytorch,tensorflow,mxnet多种AI框架。为了提高部署推理的性能,考虑采用onnxruntime机器学习后端推理框架进行部署加速,通过简单的C++ api的调用就可以满足基本使用场景。原创 2023-02-28 17:14:51 · 2417 阅读 · 1 评论 -
C++20新特性
C++20语言新特性汇总,感受经典而又现代的计算机编程语言的魅力转载 2022-06-21 11:39:52 · 1580 阅读 · 0 评论 -
使用cmake构建C++ live555流媒体服务上手项目(支持Windows,Linux)
开源的流媒体视频和音频RTSP开发框架live555(http://www.live555.com/)对于学习和构建音视频流媒体或者直播服务是很方便的。官方的源码包对各平台编译单独列出了对应的makefile,但是为了构建项目方便,这里对live555的构建编译增加了cmake支持,并整理了一个demo展示如何创建个人的上手项目,搭建一个简单的RTSP流媒体服务。项目结构live555_starter - live - openssl - src |- stream_server.h |-原创 2022-01-27 16:58:43 · 5102 阅读 · 0 评论 -
使用cmake构建C++ workflow上手项目(支持Windows,Linux)
开源的C++后端开发框架workflow(https://github.com/sogou/workflow)在成熟的互联网公司有非常稳定广泛的应用,结合了网络,异步,计算,设计了非常优秀的任务流理念。新手在使用这个框架构建程序时候,可能会安装依赖库或者搭建自己的项目工程的问题,由于官方源码仓库一直没有提供基于cmake构建和创建新项目的工具,这里提供一个基于cmake构建基于imgui新项目的模板源码,所有的三方依赖库全部都含在源码中,不需要额外在系统内部再单独安装依赖,直接拉下源码编译就可以直接运行,原创 2021-08-27 09:40:08 · 1620 阅读 · 0 评论 -
使用cmake构建C++ imgui上手项目(支持Windows,Mac,Linux)
优秀的即时渲染C++ GUI开发框架imgui(https://github.com/ocornut/imgui)在很多场合能发挥非常棒的作用。但是由于官方源码仓库一直没有提供基于cmake构建和创建新项目的工具,这里提供一个基于cmake构建基于imgui新项目的模板源码,方便搭建工程。项目结构imgui_cmake_starter - imgui - src |- win - main.cpp |- unix - main.cpp - CMakeLists.txt原创 2021-07-21 11:08:48 · 7069 阅读 · 0 评论 -
C++11写的线程安全STL库
用C++写的程序,如果用到了自带的标准模板库STL,在多线程访问的时候如果不加锁很容易造成segment fault导致程序崩溃coredump,这个问题是C++语言开发挥之不去的meng'yan原创 2021-06-18 11:35:34 · 2336 阅读 · 3 评论 -
基于C++ spdlog日志库的完善封装
spdlog是一个C++编写的极速日志打印库,支持异步写日志以及多种模式和格式化选项。以下基于spdlog库封装了一个简单易用的功能类,采用的是header-only方式,便于项目集成。代码#pragma once#include <iostream>#include <string>#include <memory>#include <time.h>#include <chrono>#include "spdlog/spdl原创 2020-12-30 15:52:35 · 8807 阅读 · 18 评论 -
C++获取对应进程的cpu和内存使用情况(支持linux和windows)
运维监控程序中经常需要根据一个进程号pid去监控实时的cpu和内存占用,以下整理了一个C++实现的简单例子,并封装为方便跨平台调用的函数代码#include <iostream>#include <thread>#include <chrono>#include <string.h>#ifdef WIN32#include <windows.h> #include <psapi.h> //#include <原创 2020-10-19 17:58:27 · 7216 阅读 · 6 评论 -
C++11写的一个简洁的单例类型模版包装器
单例是经常用到的设计模式实践,对于全局使用的唯一资源事例一般都把类型封装成单例,但是有时候觉得对于每个class都要改造一遍单例会觉得比较繁琐,尤其是在预先不知道哪些类型会使用为单例的时候。为了应对这种情况,又一个讨巧的办法是写一个单例模版类包装器,当遇到某些class类型要当作单例使用的时候就用该模版包装一下。模版类singleton.hpp#pragma once// support C++11 and above versiontemplate<typename T>cla原创 2020-08-29 20:44:59 · 799 阅读 · 0 评论 -
pytorch基于RNN实现文本情感分析并用C++加载模型预测
文本情感分析是机器学习自然语言处理NLP中常见的应用场景,给定一段文本,识别其中的情绪或态度,对其进行分类并标签化。这个手段可以应用于书籍电影评价、用户对产品满意度调查、人机对话感情色彩提取和金融研报分析。本文以美国IMDB电影网站的评论数据为例,用pytorch构建和训练基于循环神经网络LSTM的模型,然后用C++ libtorch加载模型对于给定的电影评论文本进行预测,判断改评论是正面的还是负面的,代码和数据实例参考了动手学机器学习pytorch版环境开发工具windows7/ubunt原创 2020-07-08 17:41:49 · 2661 阅读 · 2 评论 -
C++获取机器启动至今的时长和机器启动的时间戳
根据当前时间戳与机器启动至今的时间长度相减,可以精确计算出机器启动时刻的时间戳epochtime#include <iostream>#include <stdio.h>#include <time.h>#include <chrono>int main() { clock_gettime(CLOCK_REALTIME, &t...原创 2020-04-22 10:41:49 · 4251 阅读 · 0 评论 -
C++资源大全
【原文】https://github.com/fffaraz/awesome-cpp老外的Github上面是最新版,笔者这里补充了自己知道的一些工具库关于 C++ 框架、库和资源的一些汇总列表,由fffaraz发起和维护。内容包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。标准库C++ Standard Library:是一系...转载 2014-10-27 01:37:42 · 3166 阅读 · 3 评论 -
windows编译和使用tesseract(C++ api)
tesseract是一个基于C++编写的开源OCR(光学字符识别)库本文简单介绍一下windows系统中编译和使用tesseract以及调用该库的C++ api进行开发环境为win10+vs2015源码下载tesseract的编译有诸多依赖,tesseract依赖于leptonica,而leptonica又依赖于png,tiff,jpeg等基础库,所以需要下载这些依赖的源码,并且依次编译考虑到某些...原创 2018-06-02 23:23:28 · 17211 阅读 · 14 评论 -
mxnet训练模型、导出模型、加载模型 进行预测(python和C++)
mxnet支持将已训练的模型导出成网络和参数分离的json和params文件,方便离线加载进行预测和验证,同时由于mxnet支持python,C++,scala等多种编程语言,这一特性使得mxnet可以在生产系统上部署「fine-tuning」本文以一个简单那的线性回归训练模型的例子,来介绍如何在mxnet中训练模型,导出模型,加载模型,进行后续预测,其中预测部分采用了python和C++双版...原创 2018-06-11 18:16:19 · 16887 阅读 · 16 评论 -
windows下编译深度学习框架mxnet并使用C++训练模型
大多数情况下,mxnet都使用python接口进行深度学习程序的编写,方便快捷,但是有的时候,需要把机器学习训练和识别的程序部署到生产版的程序中去,比如游戏或者云服务,此时采用C++等高级语言去编写才能提高性能,本文介绍了如何在windows系统下从源码编译mxnet,安装python版的包,并使用C++原生接口创建示例程序。目标编译出libmxnet.lib和libmxnet...原创 2018-05-29 23:37:17 · 12366 阅读 · 37 评论 -
linux安装和使用tesseract(C++ api)
tesseract是一个基于C++编写的开源OCR(光学字符识别)库,对于做机器学习中NLP领域有很重要的作用,某些时候,为了方便可以不需要从头搭建模型训练OCR,那么采用开源框架就是一个便捷的做法本文简单介绍一下linux系统中安装和使用tesseract以及调用该库的C++ api进行开发此处用的linux发行版是ubuntu 14.04,其他环境同理下载理论上是可以对于所有依赖都下载源码编译...原创 2018-06-01 14:05:42 · 4668 阅读 · 3 评论 -
linux下编译深度学习框架mxnet并使用C++训练模型
mxnet是最近流行的深度学习框架之一,使用起来体验不错,不过平常都是用python接口写程序,本文介绍如何在linux下从源码编译mxnet并使用其C++接口编程。本文所使用的环境是ubunt14.04,g++4.8,如果是其他类unix发行版(fedora,mac os)同理。目标编译出libmxnet.a,libmxnet.so,本文只编译cpu版 链接共享库,调用C++接口...原创 2018-03-29 09:33:38 · 8406 阅读 · 14 评论 -
C/C++与python互相调用
https://www.zhihu.com/question/23003213 知乎详细总结 http://blog.youkuaiyun.com/taiyang1987912/article/details/44779719 实例 http://blog.youkuaiyun.com/magictong/article/details/8947892 实例毕业设计需要用到C++与python混合...原创 2015-12-08 16:01:45 · 25878 阅读 · 10 评论 -
C++实现轻量级极简httpserver和httpclient(提供http和websocket接口)
一般来说,C++的项目多是偏底层,不怎么需要跟http打交道,但有时候又需要在C++后端项目中加入一些简单 http以及websocket接口,比如游戏运营服务器,金融交易监控服务等。但是传统的实现方法比如采用libcurl,asio等较为重型的框架来做有没有必要,因此,这里采用mongoose这个库来实现基本的httpserver和httpclient功能,非常简单,包含一个h文件,一个cp...原创 2018-03-17 23:46:39 · 65785 阅读 · 94 评论 -
Qt工程pro文件的简单配置(尤其是第三方头文件和库)
Qt开发中,pro文件是对正工程所有源码、编译、资源、目录等的全方位配置的唯一方式,pro文件的编写非常重要,以下对几个重要项进行说明(win和linux,mac平台通用配置)注释以”#”开始的行,直到结束模板变量告诉qmake生成哪种makefileTEMPLATE = app其中app -表示该工程建立一个应用程序的makefile。这是默认值,所以如...原创 2017-05-07 00:36:40 · 32164 阅读 · 3 评论 -
cmake工具使用简明教程(基于命令行和gui,编译到windows和linux双平台)
引用 https://cmake.org/runningcmake/ https://cmake.org/cmake-tutorial/ http://www.hahack.com/codes/cmake/ http://www.cnblogs.com/cuiocean/p/5460419.htmlcmake可以用来构建跨平台的项目,本文简要讲解针对多目录源码...原创 2017-04-09 19:02:37 · 25234 阅读 · 6 评论 -
C++17新特性
【原文】https://zh.wikipedia.org/wiki/C++17简介C++17(或非正式名称,C++1z)是ISO/IEC 14882标准的最新版本的C++编程语言的名称。C++17标准在2017年3月达到国际标准草案(DIS)阶段。这一DIS得到了一致的认可,只有编辑者的评论,最终标准在2017年12月出版。新特性C++17引入了许多新的特性。以下列表可能不完整。...转载 2018-07-16 17:21:51 · 3113 阅读 · 0 评论 -
C++共享内存实现(windows和linux)
共享内存是一种进程间通信的方式,速度比较快 基本原理:以页面为单位,将一个普通文件映射到内存中,达到共享内存和节约内存的目的,通常在需要对文件进行频繁读写时使用,这样用内存读写取代I/O读写,以获得较高的性能windows和linux都提供了原生的系统级的C++接口,可以将文件映射到内存windows中使用CreateFileMappinglinux使用mmap代码示例这里...原创 2018-08-27 16:13:13 · 19299 阅读 · 3 评论 -
windows 下用命令行编译和运行c/c++
VS2013太臃肿,另外过分的依赖IDE也是一种病,于是想用文本编辑器写程序原创 2014-08-30 23:54:41 · 24145 阅读 · 0 评论 -
一个小巧的rpc通信组件(C++和python)
C++的网络库一般都很重,这里基于zmq这个高性能的消息中间件用C++和python写了一个客户端/服务器互相异步通信的rpc组件代码github:https://github.com/tashaxing/LittleRpc其中:用的是zmq的router和dealer异步模式支持请求/应答和推送src/cpp目录的little_rpc.h和little_rpc.cpp是C++实现的...原创 2019-06-08 13:51:32 · 3622 阅读 · 0 评论 -
机器学习库dlib的C++编译和使用(windows和linux)
dlib是一个C++编写的工具集,相比于深度学习库而言,dlib内部更多的是封装了很多传统机器学习计算函数,例如回归分析、支撑向量机、聚类,开箱即用,对外提供了C++和python两种接口。本文通过一个C++调用dlib的demo来体验一下dlib这个强大的工具库。获取从官网dlib官网或者github地址dlib源码下载最新源码这里用的是dlib-19.17编译windows和lin...原创 2019-05-28 16:59:57 · 8815 阅读 · 7 评论 -
C++11实现简易定时器
定时器timer是多线程编程中经常设计到的工具类定时器的原理其实很简单:创建一个新线程在那个线程里等待等待指定时长后后做任务这里用C++11实现了一个简单易用的定时器,包含两种模式:周期性定时任务执行单次延时任务执行timer.hpp#ifndef _TIMER_H_#define _TIMER_H_#include <functional>#incl...原创 2019-05-05 23:15:33 · 9297 阅读 · 7 评论 -
C++11实现线程池
什么是线程池线程池(thread pool)是一种线程使用模式。线程过多或者频繁创建和销毁线程会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着管理器分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价,以及保证了线程的可复用性。线程池不仅能够保证内核的充分利用,还能防止过分调度。线程池原理预先创建预定数量的线程,将多个任务加入到任务队列。类似于生产...原创 2019-05-05 21:59:05 · 4298 阅读 · 1 评论 -
C++内存池的简单原理及实现
为什么要用内存池C++程序默认的内存管理(new,delete,malloc,free)会频繁地在堆上分配和释放内存,导致性能的损失,产生大量的内存碎片,降低内存的利用率。默认的内存管理因为被设计的比较通用,所以在性能上并不能做到极致。因此,很多时候需要根据业务需求设计专用内存管理器,便于针对特定数据结构和使用场合的内存管理,比如:内存池。内存池原理内存池的思想是,在真正使用内存之前,预先...原创 2019-05-05 18:11:03 · 11058 阅读 · 9 评论 -
C++执行shell命令
在linux系统下,用C++程序执行shell命令有多种方式管道方式#include <iostream>#include <unistd.h>#include <sys/types.h>int main(){ FILE *pp = popen("cd /xxxx && ls -l", "r"); // build pipe i...原创 2019-04-11 17:28:22 · 21536 阅读 · 6 评论 -
C++加载动态链接库(cmake生成,隐式链接,显示链接)
C++程序在运行时有两种方式加载动态连接库:隐式链接和显式链接。加载动态库文件就是将动态库中的代码逻辑映射到用户进程地址空间,就在程序执行的时候进行函数调用。隐式链接隐式链接是在程序开始执行时就将动态库文件加载到应用程序当中,需要在程序构建编译阶段就指定好,这种方式比较常用unix的动态库只有.so文件,使用时需要配置工程:包含库头文件包含库.so文件地址链接库名称(多种方式)...原创 2019-02-22 11:48:40 · 7049 阅读 · 0 评论
分享