
C++/C
文章平均质量分 73
时暑
衡量工程师的标准:创造力,学习能力,解决问题能力
展开
-
eggjs框架学习心得
前言: eggjs作为阿里开源的企业级 Node.js 框架,其官网教程https://eggjs.org/zh-cn/tutorials/index.html介绍的很详细,可以帮助初学开发者快速搭建运行eggjs框架。本文主要介绍一些本人对eggjs的学习心得,也建议初学者从官网教程进行学习,然后找开源项目进行仿照实战。eggjs框架目录结构 官网的目录结构介绍缺了不少,以下是我整理的eggjs框架目录结构。 ...原创 2021-05-06 22:34:41 · 708 阅读 · 8 评论 -
【C/C++】软件异常状态快速定位技巧
前言在软件运行过程中遇到的崩溃问题,可能无法找到复现步骤,难以复现。此时使用日志或者Debug方法就很难定位出现异常的代码位置。本文主要讲述如何通过崩溃生成的信息去定位异常代码位置。Window PC软件崩溃位置定位以Visual Studio 2017为例,在工程配置属性【生成映射文件】上设置【是】工程编译完,会在生成目录生成对应的map文件,map文件需要与软件共同打包发布。当软件运行过程中出现崩溃...原创 2021-04-11 21:19:33 · 2503 阅读 · 4 评论 -
FATFS文件系统架构及源码介绍
前言:FATFS作为一个优秀的文件系统开源项目,具有高性能、易移植的特点。本文主要分三个部分:FATFS的架构介绍、源码剖析。架构:FATFS处于应用层和磁盘IO层之间,对应用层提供的接口封装风格与标准C的文件操作接口风格一致,应用程序只需进行少量的修改即可使用。对与磁盘IO层,FATFS完全与其分开,开发人员需要自己实现FATFS中diskio.h中声明的磁盘控制函数,其架构如下:源码剖析:FATFS源代码精简,只包括diskio.h、diskio.c、ff.h、ff.c、f.原创 2021-03-08 23:48:49 · 1201 阅读 · 1 评论 -
交叉编译报错【uClibc was built without large file support】和【undefined reference to `getcontext`】解决方法
前言:在使用mpis平台的交叉编译工具编译openssl+curl库时,遇到uClibc was built without large file support和undefined reference to `getcontext`编译报错。问题分析uClibc was built without large file support:该问题是由于开发人员在配置和构建uClibc编译器时没有开启Large File Support大文件支持导致的。可通过增加编译选项-D_FILE_OFFS原创 2021-03-08 13:59:12 · 1064 阅读 · 0 评论 -
设置GRPC日志输出,用于捕捉内部段错误前抛出的ERROR信息
前言: 如果你软件中使用了grpc,记住一定要设置grpc的日志输出。grpc其内部实现中一旦抛出error信息,便会导致软件段错误。而你此前调用grpc的函数可能一切都是正常的。设置GRPC日志输出 博主平常使用的是Glog作为日志库,本次例子是将grpc的日志输出转到glog中。下面是代码片段,函数头文件应该是在grpc\impl\codegen\log.h里。/* grpc_log转glog的回调函数 */static void grpc_log_to_glog_fun(g...原创 2020-10-09 23:33:49 · 2235 阅读 · 1 评论 -
【已解决】鲲鹏CPU移植GRPC库,builder.BuildAndStart()接口阻塞问题
GRPC版本:v1.30.0 c++uname -a: Linux localhost.localdomain 4.14.0-115.el7a.0.1.aarch64 #1 SMP Sun Nov 25 20:54:21 UTC 2018 aarch64 aarch64 aarch64 GNU/Linux操作系统:CentOS Linux release 7.6.1810 (AltArch)问题描述:int RunServer(std::string stdAddr){ .原创 2020-07-14 10:49:04 · 1210 阅读 · 9 评论 -
Window平台Grpc框架搭建
Grpc源码下载1、下载git软件2、运行命令【git clonehttps://github.com/grpc/grpc.git】下载源码3、运行命令【cdgrpc】【git submodule update --init】下载依赖性4、下载速度较慢的人可以直接从云盘下载成品:链接:https://pan.baidu.com/s/1K1ZpjLk_zLa3RfJ_KPYKjw提取码:sirq复制这段内容后打开百度网盘手机App,操作更方便哦Grpc工程搭建1、下载...原创 2020-06-14 15:43:38 · 600 阅读 · 0 评论 -
Conway’s Game of Life介绍及实现
前言: 博主在看新闻时,浏览到John Horton Conway因新型冠状病毒感染而去世。这场疫情带走了许多领域杰出的大师们,希望全人类早日战胜疫情。 John Horton Conway的生命游戏为不少数学家和码农所熟知,本篇主要介绍了Conway’s Game of Life以及基于C++的实现。生命游戏规则:1、 生命游戏规则有些类似与围棋,游戏背景为假设有无尽...原创 2020-04-16 23:29:23 · 2168 阅读 · 0 评论 -
使用CUnit对库做单元测试
前言:博主目前手头上管理着几个设备的跨平台库,对外接口大概有七八十个,平常写测试用例的test文件就有几十个。趁着最近版本发布后的空闲时间,对接口库进行单元测试。与Junit CppUnit类似,CUnit为C程序员提供了基本的测试功能,且提供了几种不同的界面来运行测试和报告结果。个人而言,更喜欢xml格式的报告。入门:Cunit的下载地址是:https://sourceforge.n...原创 2020-04-09 15:30:53 · 659 阅读 · 0 评论 -
glog配置与持久化记录
最近采用了glog作为一个项目的日志库,作为轻量级日志库,其功能完备,下面列举了一些大家常用的日志配置。场景一:将日志输出到指定文件夹和终端中:#include <iostream>#include "glog/logging.h"using namespace std;int main(int argc, char** argv){ google::InitG...原创 2020-03-28 22:17:51 · 6412 阅读 · 2 评论 -
【CURLE_RECV_ERROR】错误码解决
前言: 年末出大坑,目前博主项目中对外提供的设备接口库涉及到网络通信,部分HTTP请求概率性出现【CURLE_RECV_ERROR】问题。博主使用的是libcurl第三方库进行http请求,由于网上没有查到相关资料,下面记录一下,本次问题分析和解决办法,希望能给其他人提供解决思路。问题定位:通过Wireshark抓包,我对比了正常时候的HTTP流和异常时候的HTTP流。异常HTT...原创 2020-01-13 00:56:06 · 5656 阅读 · 0 评论 -
【C】【RCRE】正则表达式从入门到实战
前言:正则表达式(Regular Expression)用于检索符合自定义规则的文本。例如在检索用户输入的手机号、身份证号有效性,用户设置的密码是否安全等场景时,正则表达式所体现的功能非常强大。当然,它的缺点也很明显,其不易于阅读。本文示例使用C语言正则表达式引擎RCRE,通过实例让你更快上手。入门:正则表达式是由普通字符(大小写字母、数字、标点等)和元字符组成。常用的元字符如下:...原创 2019-12-22 18:11:02 · 717 阅读 · 0 评论 -
交叉编译libcurl,遇到libtool: eval: line 1722: syntax error near unexpected token `|'
记录交叉编译libcurl中遇到的编译错误,之前用arm-linux-gnueabihf-gcc编译器,编译正常,但是切换成aarch64-himix100-linux-gcc遇到编译报错libtool: eval: line 1722: syntax error near unexpected token `|'解决方案:1、export NM=nm2、./configure --p...原创 2019-12-08 22:53:45 · 849 阅读 · 0 评论 -
【以后再也不会用了】Libuv异步定时事务
前言: 应项目需求在设备接口中封装了异步事件处理,考虑到跨平台性选用了libuv工具包,接口需求是异步定时处理一些逻辑运算,结果在对着API使用的过程中发现,libuv在很多回调函数封装中,没有封装传参!大概以后再也不会用了!异步定时事务代码:#include <stdlib.h>#include <uv.h>#include <stdio.h&g...原创 2019-11-05 16:34:32 · 318 阅读 · 0 评论 -
window动态调用第三方库
前言:最近项目紧急,有一段时间没写博客了。在项目开发过程中,同事问了一个问题,我尝试给他解决后,在此记录一下。在项目中,我针对二种不同的设备,给上层封装了一套C接口,即使用同一个头文件,调用不同的驱动库,即可对设备进行操作。同事在编写上层应用时,不知道如何调用。本文讲述的一个方法是使用【LoadLibrary】、【GetProcAddress】、【FreeLibrary】来解决这个问题,...原创 2019-11-02 12:48:58 · 324 阅读 · 0 评论 -
异步串口通信框架
前言: 前段时间,服务器增加串口通信需求,早期串口框架仅仅只能支持单串口通信,还不支持热插拔。 由于在网上找了下没有自己想要的框架,因此,自己搭建了一个异步串口通信框架, 目前该框架已投入使用,没有发现内存泄露或者其他问题。该框架运用了【libserialport】【libuv】开源库,二者都支持跨平台,因此在可以放心在其他平台下使用该框架。 如果你确定要使用我的框架,请阅读最后...原创 2019-08-06 22:46:29 · 3542 阅读 · 1 评论 -
C函数获取(Dos/Shell)系统命令输出
#include <stdio.h>#include <stdlib.h>#define SYSTEMFILE "qcard_system.txt"/******************************************************************************** Function Name : QCard_Sys...原创 2019-08-03 21:35:49 · 216 阅读 · 0 评论 -
写出高性能的C代码---编写拷贝函数
在上一章《写出高性能的C代码---深入理解编译器和硬件平台》中,我写道:如果有标准的库函数可以调用,就不要自己写,绝大多数的人水平远远达不到编写标准库大牛的水平。这章为边把memcpy这个标准库函数拉出来述说这个观点。如果观众老爷们自己写个关于memcpy函数会是怎么样的呢?首先我们来看下memcpy的描述 void *memcpy(void *dest, co...原创 2018-07-27 01:25:56 · 653 阅读 · 0 评论 -
广度优先搜索介绍及其算法的实现(C++)
本章将讲述一种图算法------广度优先算法;该算法的应用领域有:1、编写国际跳棋AI,计算最少走多少步能获胜;2、编写拼写检查器,计算最少编辑多少个地方就可将拼错的单词改成正确的单词;3、根据人际关系,找到最近的医生等。有人会问“图”是什么?图由节点和边组成,一个节点可能有众多相邻的节点相连,这些节点成为邻居。而广度优先算法解决的就是二个节点间最短路径问题及是否能抵达...原创 2018-09-02 01:35:14 · 1650 阅读 · 0 评论 -
CJSON使用(一)
前言最近开发的一个项目中,采用前后端分离,前端使用java开发,后端使用C++,前后端交互于接口模块,通过SOAP为前端提供接口,由于传输的数据可能会很复杂,应此决定采用json格式进行数据交互。CJOSN介绍json是一种轻量级的数据交换格式,是一种轻量级的数据交换格式。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地...原创 2018-09-10 01:40:12 · 739 阅读 · 0 评论 -
LINUX系统识别外设(基于C的自动读写)【一】
前言最近在开发基于量子随机数的离线密钥充值系统,主要功能是对外设进行充值随机数密钥。软件部署在centos7系统上,因此需要软件自动识别系统是否有外设通过USB口接入设备。识别外设在linux系统中,外设连入系统是以文件形式存在的,设备文件存放在linux系统的/dev下面。外设有很多种:软盘、U盘、光驱、磁盘等。它们被系统自动识别和命名,命名规则为 主设备号(设备类型)+次设备号(具...原创 2018-09-23 00:32:51 · 1849 阅读 · 0 评论 -
LINUX系统识别外设(基于C的自动读写)(LINUX模拟U盘)【二】
前言最近在开发基于量子随机数的离线密钥充值系统,主要功能是对外设进行充值随机数密钥。软件部署在centos7系统上,因此需要软件自动识别系统是否有外设通过USB口接入设备。在上一章中我简单介绍了如何去对linux系统中的外来存储设备进行读写操作,在本章中我将继续讲解,并提供相应的源码作例子 模拟U盘由于学习过程中,你可能没有实际的外设进行演练,因此博主写了一份脚本文件用作LIN...原创 2018-10-06 14:28:47 · 1912 阅读 · 2 评论 -
LeetCode刷题记录一(C)
1、给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]/** * Note: The returned array must be ...原创 2018-11-14 00:40:56 · 176 阅读 · 0 评论 -
使用C/C++和OCI 对Oracle中的指定表进行备份
前言前段时间做数据库的项目需要ORACL数据库中的某些表进行拷贝到另一个ORACLE数据库中,并给前端提供相应的API接口。后端采用C/C++框架,应此我选用OCI接口来做,关于OCI的环境安装,参考我上一篇博客业务分析如何拷贝一张表1、在A数据库获取建表语句2、在A数据库获取数据3、在B数据库运行建表语句4、在B数据库插入数据我顺便上传了源码仅供参考讨论学习...原创 2018-11-08 16:52:46 · 376 阅读 · 0 评论 -
PhxRPC (一)环境搭建
安装前下载:1.phxrpc-master.zip2.protobuf-master.zip 安装步骤1、解压上述二个压缩包;2、在/phxrpc-master目录下创建third_party文件夹,将protobuf-master文件夹复制到/phxrpc-master/third_party目录下并将protobuf-master重命名为protobuf;3、进入/...原创 2018-12-04 22:22:08 · 834 阅读 · 0 评论 -
grpc C++开发环境安装
平台 UbanTu14安装命令1 sudo apt-get install build-essential autoconf libtool libgflags-dev libgtest-dev clang libc++-dev pkg-config unzip2 git clone https://github.com/grpc/grpc3 cd grpc4 git subm...原创 2018-12-06 16:37:14 · 2158 阅读 · 2 评论 -
valgrind 使用
ValgrindValgrind是一款用于内存调试,内存泄漏检测以及性能分析的软件开发工具。安装安装命令:apt-get install valgrind安装成功后,查看安装版本号命令:valgrind -h --version使用valgrind下的工具的命令格式:valgrind --tool = memcheck --leak-check = full ./test查...原创 2019-01-01 20:47:10 · 366 阅读 · 0 评论 -
GDB调试(快速入门篇)
前言:在LINUX平台下使用Log+Gdb+Core,一般能应付绝大多数调试程序的场景;GDB:用户文档查阅:https://sourceware.org/gdb/current/onlinedocs/gdb/编译程序时请加上-g选项,关闭优化机制和创建符号表以便调试器调试:gcc/g++ -g你能用GDB对C/C++程序做什么?(1)启动程序;(2)使程序在指定条...原创 2019-04-01 00:07:48 · 367 阅读 · 0 评论 -
ubantu14 64位搭建linux-arm交叉编译环境
下载安装包:arm-linux-gcc-4.4.3.tar.gz(https://pan.baidu.com/s/1E3Vtr9TPMBLL24bnrtQLjw password tor3)以root用户运行下面命令1、解压安装包命令:tar xvzf arm-linux-gcc-4.4.3.tar.gz -C /2、创建目录mkdir /usr/local/arm...原创 2019-07-14 19:37:01 · 407 阅读 · 0 评论 -
【记录】Error:LNK2001:无法解析外部符号 _imp__stdio_common_vsprintf
【情节】今天,突然有合作公司的工程师打电话跟我说,他们的工程加入我提供的lib库后报这个问题。我让对方把工程发过来,结果在我的开发环境下直接能编译过。【原因】对方使用的是VS2013,而我的开发环境是VS2017。在VS2013环境下缺少部分Lib标准库。【解决方法】我用VS2010给他们重新编译了一遍库文件。(高版本适配低版本)【结论】集成开发环境到底用新一点还是旧一...原创 2019-07-23 17:53:34 · 4740 阅读 · 1 评论 -
【交叉编译】ubantu交叉编译Android平台动态库(.so文件)、静态库(.a文件)
前言: 本文主要写给C工程师,如何提供Android平台的C库给第三方使用。平台:ubantu14.04 64bit交叉编译工具:android-ndk64-r10-linux-x86_64.tar交叉编译工具下载地址: 链接:https://pan.baidu.com/s/1VCttTraUoSh82ENVA4t3Og 提取码:sjwo搭建交叉编译环境:1、将an...原创 2019-07-25 11:53:05 · 1957 阅读 · 0 评论 -
【VS2017】将DLL封装成ActiveX控件(OCX文件)详细步骤
前言 最近组内WEB工程师在做浏览器的加密卡识别登陆功能,由于JS不能进行太复杂操作,因此委托我使用C编写DLL库封装成OCX控件给他调用。我也是第一次编写该类程序,查阅了不少资料,在此分享给大家。 本文使用的平台:Win10系统+Visual Studio 2017软件正文建立工程1、打开Visual Studio 2017软件,点击【文件】、【新建】、...原创 2019-07-21 21:05:00 · 7433 阅读 · 2 评论 -
写出高性能的C代码---深入理解编译器和硬件平台
写这篇文章之前,首先需要感谢我的部长,带我打开了这扇门,以下的知识分享来源于部长的传授。对于底层嵌入式开发而言,现在一份程序的空间利用率已经随着硬件的升级而降低了要求,但时间利用率依然重要。 那么如何写出一份高性能的代码呢,再次之前我先阐述下编译器对.c文件编译的行为。一 编译步骤1:预编译1)展开头文件2)执行预编译操作符,例如:#include、 #define MAX...原创 2018-07-21 20:02:10 · 1141 阅读 · 0 评论