C/C++
文章平均质量分 57
踏莎行hyx
疏影横斜水清浅,暗香浮动月黄昏。
展开
-
在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 · 866 阅读 · 0 评论 -
C++利用SIGSEGV信号处理实现发生segment fault后不崩溃的代码
C++代码发生段错误后系统会抛出SIGSEGV 信号 ,之后 调用默认的信号处理函数 ,产生core文件 ,然后关闭程序。让程序不挂掉的办法就是捕获这个中断信号,调用自定义的信号处理函数,并且叠加一些代码跳转的方法。这里展示了一种方法。这里用到两个函数sigsetjmp和siglongjmp,前者会保存当前的信号屏蔽表 (signal mask),后者跳转的时候会恢复线程的屏蔽表。有效的做法是在发生段错误的代码之前保存程序执行上下文,信号捕捉后通过跳转函数直接跳过段错误的代码,从而达到程序继续执行的目的。原创 2024-06-28 18:03:58 · 384 阅读 · 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 · 523 阅读 · 0 评论 -
C++开源搜索引擎xapian开发入门
开源搜索引擎框架和产品有很多,例如elasticsearch,sphinx,xapian,lucence,typesense,MeiliSearch 等,分别用不同的语言实现,具有类似但不完全相同的功能。准确来说不属于通用的搜索引擎,而是属于一种基于索引的文字检索系统。考虑到方便将这种检索系统通过代码开发的形式集成到自己的项目种,而不是单独部署一个完整的系统使用,这里推荐使用C++语言编写的,作为依赖库的形式,调用C++ api在工程中使用。原创 2023-06-29 18:26:01 · 1153 阅读 · 0 评论 -
C++轻量级跨平台桌面GUI库FLTK的简单使用
C++的跨平台桌面GUI库有很多,大体上分成两种流派:retained mode和retained mode。以下是一个使用FLTK开发的简单demo代码示例,功能是显示一个编辑框和一个按钮,点击按钮刷新编辑框的数字。但如果在开发小工具项目,要求跨平台、开源免费、协议友好、性能高、轻量级的需求,这里推荐FLTK库(使用这些框架都支持构建在windows、mac、linux上面能运行的桌面图形界面程序。),只需要作为一个依赖库的方式引入工程即可。原创 2023-06-07 18:08:50 · 2850 阅读 · 0 评论 -
pytorch导出模型并使用onnxruntime C++部署加载模型推理
机器学习的框架众多,为了方便复用和统一后端模型部署推理,业界主流都在采用onnx格式的模型,支持pytorch,tensorflow,mxnet多种AI框架。为了提高部署推理的性能,考虑采用onnxruntime机器学习后端推理框架进行部署加速,通过简单的C++ api的调用就可以满足基本使用场景。原创 2023-02-28 17:14:51 · 1959 阅读 · 1 评论 -
C++20新特性
C++20语言新特性汇总,感受经典而又现代的计算机编程语言的魅力转载 2022-06-21 11:39:52 · 1290 阅读 · 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 · 4738 阅读 · 0 评论 -
使用cmake构建C++ workflow上手项目(支持Windows,Linux)
开源的C++后端开发框架workflow(https://github.com/sogou/workflow)在成熟的互联网公司有非常稳定广泛的应用,结合了网络,异步,计算,设计了非常优秀的任务流理念。新手在使用这个框架构建程序时候,可能会安装依赖库或者搭建自己的项目工程的问题,由于官方源码仓库一直没有提供基于cmake构建和创建新项目的工具,这里提供一个基于cmake构建基于imgui新项目的模板源码,所有的三方依赖库全部都含在源码中,不需要额外在系统内部再单独安装依赖,直接拉下源码编译就可以直接运行,原创 2021-08-27 09:40:08 · 1231 阅读 · 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 · 5633 阅读 · 0 评论 -
C++11写的线程安全STL库
用C++写的程序,如果用到了自带的标准模板库STL,在多线程访问的时候如果不加锁很容易造成segment fault导致程序崩溃coredump,这个问题是C++语言开发挥之不去的meng'yan原创 2021-06-18 11:35:34 · 1832 阅读 · 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 · 7386 阅读 · 15 评论 -
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 · 6056 阅读 · 6 评论 -
C++11写的一个简洁的单例类型模版包装器
单例是经常用到的设计模式实践,对于全局使用的唯一资源事例一般都把类型封装成单例,但是有时候觉得对于每个class都要改造一遍单例会觉得比较繁琐,尤其是在预先不知道哪些类型会使用为单例的时候。为了应对这种情况,又一个讨巧的办法是写一个单例模版类包装器,当遇到某些class类型要当作单例使用的时候就用该模版包装一下。模版类singleton.hpp#pragma once// support C++11 and above versiontemplate<typename T>cla原创 2020-08-29 20:44:59 · 628 阅读 · 0 评论 -
pytorch基于RNN实现文本情感分析并用C++加载模型预测
文本情感分析是机器学习自然语言处理NLP中常见的应用场景,给定一段文本,识别其中的情绪或态度,对其进行分类并标签化。这个手段可以应用于书籍电影评价、用户对产品满意度调查、人机对话感情色彩提取和金融研报分析。本文以美国IMDB电影网站的评论数据为例,用pytorch构建和训练基于循环神经网络LSTM的模型,然后用C++ libtorch加载模型对于给定的电影评论文本进行预测,判断改评论是正面的还是负面的,代码和数据实例参考了动手学机器学习pytorch版环境开发工具windows7/ubunt原创 2020-07-08 17:41:49 · 2326 阅读 · 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 · 3725 阅读 · 0 评论 -
windows 下用命令行编译和运行c/c++
VS2013太臃肿,另外过分的依赖IDE也是一种病,于是想用文本编辑器写程序原创 2014-08-30 23:54:41 · 23857 阅读 · 0 评论 -
windows下编译深度学习框架mxnet并使用C++训练模型
大多数情况下,mxnet都使用python接口进行深度学习程序的编写,方便快捷,但是有的时候,需要把机器学习训练和识别的程序部署到生产版的程序中去,比如游戏或者云服务,此时采用C++等高级语言去编写才能提高性能,本文介绍了如何在windows系统下从源码编译mxnet,安装python版的包,并使用C++原生接口创建示例程序。目标编译出libmxnet.lib和libmxnet...原创 2018-05-29 23:37:17 · 11990 阅读 · 37 评论 -
mxnet训练模型、导出模型、加载模型 进行预测(python和C++)
mxnet支持将已训练的模型导出成网络和参数分离的json和params文件,方便离线加载进行预测和验证,同时由于mxnet支持python,C++,scala等多种编程语言,这一特性使得mxnet可以在生产系统上部署「fine-tuning」本文以一个简单那的线性回归训练模型的例子,来介绍如何在mxnet中训练模型,导出模型,加载模型,进行后续预测,其中预测部分采用了python和C++双版...原创 2018-06-11 18:16:19 · 16512 阅读 · 16 评论 -
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 · 15351 阅读 · 14 评论 -
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 · 8118 阅读 · 14 评论 -
C/C++与python互相调用
https://www.zhihu.com/question/23003213 知乎详细总结 http://blog.csdn.net/taiyang1987912/article/details/44779719 实例 http://blog.csdn.net/magictong/article/details/8947892 实例毕业设计需要用到C++与python混合...原创 2015-12-08 16:01:45 · 25194 阅读 · 10 评论 -
C++实现轻量级极简httpserver和httpclient(提供http和websocket接口)
一般来说,C++的项目多是偏底层,不怎么需要跟http打交道,但有时候又需要在C++后端项目中加入一些简单 http以及websocket接口,比如游戏运营服务器,金融交易监控服务等。但是传统的实现方法比如采用libcurl,asio等较为重型的框架来做有没有必要,因此,这里采用mongoose这个库来实现基本的httpserver和httpclient功能,非常简单,包含一个h文件,一个cp...原创 2018-03-17 23:46:39 · 63815 阅读 · 94 评论 -
Qt工程pro文件的简单配置(尤其是第三方头文件和库)
Qt开发中,pro文件是对正工程所有源码、编译、资源、目录等的全方位配置的唯一方式,pro文件的编写非常重要,以下对几个重要项进行说明(win和linux,mac平台通用配置)注释以”#”开始的行,直到结束模板变量告诉qmake生成哪种makefileTEMPLATE = app其中app -表示该工程建立一个应用程序的makefile。这是默认值,所以如...原创 2017-05-07 00:36:40 · 30962 阅读 · 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 · 24340 阅读 · 6 评论 -
C++资源大全
【原文】https://github.com/fffaraz/awesome-cpp老外的Github上面是最新版,笔者这里补充了自己知道的一些工具库关于 C++ 框架、库和资源的一些汇总列表,由fffaraz发起和维护。内容包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。标准库C++ Standard Library:是一系...转载 2014-10-27 01:37:42 · 2928 阅读 · 3 评论 -
理解javascript闭包和C++闭包
http://www.jb51.net/article/24101.htm js闭包深入浅出 http://segmentfault.com/a/1190000000652891 js闭包实例 http://www.cnblogs.com/Aion/p/3449756.html 关于C++闭包在js中闭包是一个难点,其他语言例如C++、C#、java等都有闭包的实现。javascri原创 2015-09-20 18:00:08 · 1940 阅读 · 0 评论 -
linux安装和使用tesseract(C++ api)
tesseract是一个基于C++编写的开源OCR(光学字符识别)库,对于做机器学习中NLP领域有很重要的作用,某些时候,为了方便可以不需要从头搭建模型训练OCR,那么采用开源框架就是一个便捷的做法本文简单介绍一下linux系统中安装和使用tesseract以及调用该库的C++ api进行开发此处用的linux发行版是ubuntu 14.04,其他环境同理下载理论上是可以对于所有依赖都下载源码编译...原创 2018-06-01 14:05:42 · 4241 阅读 · 3 评论 -
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 · 2735 阅读 · 0 评论 -
优雅地用C++发邮件
这里是一个基于curl库写的C++发邮件的轮子,随取随用支持收件人、抄送人、富文本、附件代码https://github.com/tashaxing/cpp_email目录结构cpp_email└── deps └── curl└── src ├── email_sender.cpp ├── email_sender.h └── main.cpp其中:...原创 2019-07-07 15:38:19 · 3075 阅读 · 3 评论 -
一个小巧的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 · 3196 阅读 · 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 · 8092 阅读 · 7 评论 -
C++11实现简易定时器
定时器timer是多线程编程中经常设计到的工具类定时器的原理其实很简单:创建一个新线程在那个线程里等待等待指定时长后后做任务这里用C++11实现了一个简单易用的定时器,包含两种模式:周期性定时任务执行单次延时任务执行timer.hpp#ifndef _TIMER_H_#define _TIMER_H_#include <functional>#incl...原创 2019-05-05 23:15:33 · 9004 阅读 · 7 评论 -
C++11实现线程池
什么是线程池线程池(thread pool)是一种线程使用模式。线程过多或者频繁创建和销毁线程会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着管理器分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价,以及保证了线程的可复用性。线程池不仅能够保证内核的充分利用,还能防止过分调度。线程池原理预先创建预定数量的线程,将多个任务加入到任务队列。类似于生产...原创 2019-05-05 21:59:05 · 4020 阅读 · 1 评论 -
C++内存池的简单原理及实现
为什么要用内存池C++程序默认的内存管理(new,delete,malloc,free)会频繁地在堆上分配和释放内存,导致性能的损失,产生大量的内存碎片,降低内存的利用率。默认的内存管理因为被设计的比较通用,所以在性能上并不能做到极致。因此,很多时候需要根据业务需求设计专用内存管理器,便于针对特定数据结构和使用场合的内存管理,比如:内存池。内存池原理内存池的思想是,在真正使用内存之前,预先...原创 2019-05-05 18:11:03 · 10712 阅读 · 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 · 20815 阅读 · 6 评论 -
C++加载动态链接库(cmake生成,隐式链接,显示链接)
C++程序在运行时有两种方式加载动态连接库:隐式链接和显式链接。加载动态库文件就是将动态库中的代码逻辑映射到用户进程地址空间,就在程序执行的时候进行函数调用。隐式链接隐式链接是在程序开始执行时就将动态库文件加载到应用程序当中,需要在程序构建编译阶段就指定好,这种方式比较常用unix的动态库只有.so文件,使用时需要配置工程:包含库头文件包含库.so文件地址链接库名称(多种方式)...原创 2019-02-22 11:48:40 · 6527 阅读 · 0 评论 -
C++使用libcurl实现ftp客户端(上传、下载、文件列表、进度、断点续传)
在此之前需要先搭建ftp服务器(windows自带,linux可以用vsftpd)以linux环境为例,用cmake编译出libcurl.so动态库(静态库也行)用libcurl C++库写了个ftp上传限制的简单示例,带进度和断点续传功能。原创 2018-11-08 22:21:37 · 23456 阅读 · 4 评论 -
C++实现utf8和gbk编码字符串互相转换
C++实现utf8和gbk编码字符串互相转换,可跨平台使用main.cpp#include &amp;lt;iostream&amp;gt;#include &amp;lt;stdio.h&amp;gt;#include &amp;lt;stdlib.h&amp;gt;#include &amp;lt;locale.h&amp;gt;#include &am原创 2018-10-20 19:31:19 · 41015 阅读 · 16 评论 -
C++共享内存实现(windows和linux)
共享内存是一种进程间通信的方式,速度比较快 基本原理:以页面为单位,将一个普通文件映射到内存中,达到共享内存和节约内存的目的,通常在需要对文件进行频繁读写时使用,这样用内存读写取代I/O读写,以获得较高的性能windows和linux都提供了原生的系统级的C++接口,可以将文件映射到内存windows中使用CreateFileMappinglinux使用mmap代码示例这里...原创 2018-08-27 16:13:13 · 18035 阅读 · 3 评论