自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(93)
  • 资源 (2)
  • 收藏
  • 关注

转载 【Linux】配置libzmq时,执行 autogen.sh 报错 possibly undefined macro: AC_SUBST

原文链接:https://www.cnblogs.com/vancasola/p/9378456.html。对应下表,将以下安装并升级到相应或者更高的版本。

2024-01-09 17:33:48 82

原创 【嵌入式】通过shell脚本调用minicom向USB串口发送指令

若为空,点击virtualBox上方命令栏 “设备” -> “USB” ,勾选 “FTDI FT232R USB UART [0600]”然后输入Ctrl + A + Z,来进入配置界面,若不能成功唤醒,则多半是因为Ctrl + A 被占用。参考链接:https://blog.csdn.net/hannibaychty/article/details/126959861。参考链接:https://blog.csdn.net/regnarts00/article/details/121592115。

2022-10-12 17:17:00 3001 1

原创 【Linux】进程切换

操作系统为了控制进程的执行,必须有能力挂起正在CPU上运行的进程,并恢复以前挂起的某个进程的执行,这种行为被称为进程切换,任务切换或上下文切换或者说,进行进程切换就是从正在运行的进程中收回处理器,然后再使待运行进程来占用处理器。 这里所说的从某个进程收回处理器,实质上就是把进程存放在处理器的寄存器中的中间数据找个地方存起来,从而把处理器的寄存器腾出来让其他进程使用。那么被中止运行进程的中间数据存在何处好呢?当然这个地方应该是进程的私有堆栈。让进程来占用处理器,实质上是把某个进程存放在私有堆栈中寄存器的数

2022-05-24 22:41:13 1048

原创 【Linux】延迟相关数据

执行一个指令 1 nsL1缓存查询 0.5 ns分支预测错误 (Branch mispredict) 3 nsL2缓存查询 4 ns互斥锁/解锁 17 ns在1Gbps 的网络上发送2KB 44 ns主存访问 100 nsZippy 压缩 1KB 2,000 ns从内存顺序读取 1MB 3,000 nsSSD 随机读 16,000 ns从SSD 顺序读取 1MB 49,000ns同一个数据中心往返 500,000 ns从磁盘顺序读取 1MB 825,000 ns磁盘寻址 2,00.

2022-04-18 20:06:01 602

转载 【C/C++】第一次在此定义,多重定义 multiple definition of

报错screenshot.o:在函数‘OnvifClientDevice::GetDNS(_tds__GetDNSResponse&)’中:screenshot.cpp:(.text+0x390): multiple definition of `OnvifClientDevice::GetDNS(_tds__GetDNSResponse&)’ptzcontrol.o:ptzcontrol.cpp:(.text+0xa0):第一次在此定义问题调查一个头文件 a.h 中函数声明且定义

2022-01-06 16:06:05 1266

原创 【C/C++】监控系统内存代码

项目代码用的,为了方便以后回顾,记录一下#include <stdio.h> #include <stdint.h>#include <stdlib.h>#include <pthread.h>#include <unistd.h> #include <string.h>#include <sys/mman.h>#include <fcntl.h>#define MRYRATIO 100#de

2021-12-28 19:35:26 752

原创 【Linux】GDB底层调试原理

文章目录一、GDB调试模型二、GDB调试的系统调用三、GDB调试已经执行的服务进程四、断点的原理五、next的原理一、GDB调试模型GDB调试包括2个程序:gdb程序和被调试程序。根据这2个程序是否运行在同一台电脑中,可以把GDB的调试模型分为2种: 1. 本地调试 2. 远程调试本地调试:调试程序和被调试程序运行在同一台电脑中。远程调试:调试程序运行在一台电脑中,被调试程序运行在另一台电脑中。与本地调试相比,远程调试中多了一个GdbServer程序,它和目标程序都是运行在目标机中,可能是一台x8

2021-12-19 22:41:28 1209

转载 【SQL】left join 、right join 、inner join之间的区别

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录inner join(等值连接) 只返回两个表中联结字段相等的行举例,表A记录如下aIDaNum1a200501112a200501123a200501134a200501145a20050115表B记录如下bIDbName12006032401.

2021-11-11 09:55:10 131

原创 【Linux】申请巨页内存

一、原理概述操作系统对内存采用多级页表和分页进行管理,而操作系统每个页默认大小为4KB。如果进程使用的内存过大,比如1GB,这样会在页表中占用 1GB / 4KB = 262144个页表项,而系统TLB可以容纳的页表项远小于这个数量。当多个内存密集型应用访问内存时,会造成过多的TLB未命中。  因此在特定情况下会需要减少未命中次数,一个可行的办法就是增大每个页的尺寸。操作系统默认支持的大页是2MB,当使用1GB内存时,在页表中将占用 1GB / 2MB = 512个页表项,可以大大提升TLB命中率,进而

2021-10-20 20:04:45 963

转载 【C/C++】gettimeofday()函数:获取当前时间

头文件:#include <sys/time.h> #include <unistd.h>定义函数:int gettimeofday (struct timeval * tv, struct timezone * tz);函数说明:gettimeofday()会把目前的时间有tv 所指的结构返回,当地时区的信息则放到tz 所指的结构中。timeval 结构定义为:struct timeval{ long tv_sec; //秒 long tv

2021-08-22 18:29:10 2526

转载 【Linux】Valgrind工具集详解

文章目录一、简介二、入门三、打印信息说明四、抑制错误五、命令行详解六、使用Valgrind gdbserver和GDB调试程序七、Memcheck(内存错误检测器)一、简介一、Valgrind概述Valgrind是用于构建动态分析工具的仪器框架。它附带了一组工具,每个工具都执行某种调试,分析或类似任务,可帮助您改进程序。Valgrind的架构采用模块化设计,因此可以轻松创建新工具,而不会干扰现有结构。二、工具集列表1、Memcheck是一个内存错误检测器。它可以帮助您使程序,尤其是那些用C和C +

2021-08-22 18:24:58 3062

原创 【Linux】VIM使用技巧

1、. :重复上次修改2、x:删除光标下的字符3、u:撤销上次修改4、dd:删除一整行5、>G:增加当前行的缩进6、j:光标移动到下一行7、$:移动到行尾8、a:在当前光标后添加内容9、A:在当前行尾添加内容10、s:先删除光标下的字符,再进入插入模式11、f+:查找下一处字符“+”出现的位置,并移动光标12、;:重复查找上次 f 命令所查找的字符13、,:反向查找上次 f 命令所查找的字符复合命令等效的长命令Cc$sclS^CI

2021-06-02 11:38:58 142

原创 【C/C++】程序性能优化

码个坑,后面来填……

2021-05-25 19:06:18 427

转载 【C/C++】C语言volatile关键字详解

volatile 是易变的、不稳定的意思。很多人根本就没见过这个关键字,不知道它的存在。也有很多程序员知道它的存在,但从来没用过它。我对它有种“杨家有女初长成,养在深闺人未识” 的感觉。volatile 关键字和const 一样是一种类型修饰符,用它修饰的变量表示可以被某些编译器未知的因素更改,比如操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。先看看下面的例子:int i=10;int j = i;//(1)语句i

2021-05-25 18:33:14 430

原创 【C/C++】性能优化之打点计时(纳秒级)

目的:加时间戳打印是为了方便快速对性能耗时进行测试比如想要测试printf这个函数调用的耗时bind_core(4);for(int i=0;i<MAX_SAMPLES;I++){ timing_now(now_tsc0); printf("11111111"); timing_now(now_tsc1); GATHERING_NS(series0,now_tsc0,now_tsc1,NULL);}操作步骤:隔核绑核加一个循环在printf前加开始时间戳在printf后

2021-05-18 13:57:50 1046

原创 【Linux】隔核绑核

隔核:指定的cpu核心只参与最低限度的OS内核计算绑核:运行程序时只使用指定的CPU核心隔核方法1:修改grub环境:CentOS7具体步骤:vim /etc/default/grub 修改 GRUB_CMDLINE_LINUX="... ioslcpus=1-2,7-8" 隔离1,2,7,8核心grub2-mkconfig -o /boot/grub2/grub.cfg 更新配置reboot 重启cat /proc/cmdline 查看结果绑核方法1:taskset命令或设置线程属性

2021-05-13 17:53:18 5589 2

原创 【C/C++】extern、static、const

文章目录一、extern三、extern 和 const一、extern如果函数的声明中带有关键字extern,仅仅是暗示这个函数可能在别的源文件里定义,没有其它作用。即下述两个函数声明没有明显的区别:extern int f(); int f();当然,这样的用处还是有的,就是在程序中取代include “*.h”来声明函数,在一些复杂的项目中,我比较习惯在所有的函数声明前添加extern修饰。关于这样做的原因和利弊可见下面的这个例子:“用extern修饰的全局变量”(1) 在test1.h

2021-04-16 11:11:11 502

原创 【C/C++】C++输出迭代器的地址

&*iterator 或 std::addressof(*iterator)

2021-04-02 17:55:12 1123

转载 【Linux】iptables详解

文章目录iptables简介iptables基础iptables和netfilter的关系iptables传输数据包的过程iptables的规则表和链表(tables)链(chains)规则表规则链规则表之间的优先顺序规则链之间的优先顺序(分三种情况)第一种情况:入站数据流向第二冲情况:转发数据流向第三种情况:出站数据流向管理和设置iptables规则iptables的基本语法格式防火墙处理数据包的四种方式iptables防火墙规则的保存与恢复iptables防火墙常用的策略1.拒绝进入防火墙的所有ICMP

2021-04-02 17:53:32 695

原创 【C/C++】gcc/g++参数详解

gcc 与 g++ 分别是 gnu 的 c & c++ 编译器 gcc/g++ 在执行编译工作的时候,总共需要4步:1、预处理,生成 .i 的文件[预处理器cpp]2、将预处理后的文件转换成汇编语言, 生成文件 .s [编译器egcs]3、有汇编变为目标代码(机器代码)生成 .o 的文件[汇编器as]4、连接目标代码, 生成可执行程序 [链接器ld]参数详解-x language filename设定文件所使用的语言, 使后缀名无效, 对以后的多个有效。也就是根据约定 C 语言的后缀名

2021-03-30 20:14:16 817 1

转载 【C/C++】字节存储排序:大端和小端的判别及转换

当前的存储器,多以byte为访问的最小单元,当一个逻辑上的地址必须分割为物理上的若干单元时就存在了先放谁后放谁的问题,于是端(endian)的问题应运而生了,对于不同的存储方法,就有大端(big-endian)和小端(little- endian)两个描述。字节排序按分为大端和小端,概念如下大端(big endian):低地址存放高有效字节,即网络字节序。小端(little endian):低字节存放低有效字节,即主机字节序。现在主流的CPU,intel系列的是采用的little endian的格式

2021-03-30 19:10:40 8509

原创 【C/C++】void *无类型指针的使用

void 指针是一种特殊的指针,表示为“无类型指针”,在 ANSI C 中使用它来代替char*作为通用指针的类型。由于 void 指针没有特定的类型,因此它可以指向任何类型的数据。也就是说,任何类型的指针都可以直接赋值给 void 指针,而无需进行其他相关的强制类型转换,如下面的示例代码所示:void *p1;int *p2;…p1 = p2;虽然如此,但这并不意味着可以无需任何强制类型转换就将 void 指针直接赋给其他类型的指针,因为“空类型”可以包容“有类型”,而“有类型”则不能包容“空

2021-03-25 10:34:56 2138

原创 【Linux】gdb调试coredump

一、coredump是什么Coredump叫做核心储,它是进程运行时在突然崩溃的那一刻的一个内存快照。操作系统在程序发生异常而异常在进程内部又没有被捕获的情况下,会把进程此刻内存、寄存器状态、运行堆栈等信息转储保存在一个文件里。该文件也是二进制文件,可以使用gdb、elfdump、objdump或者windows下的windebug、solaris下的mdb进行打开分析里面的具体内容。注:core是在半导体作为内存材料前的线圈,当时用线圈当做内存材料,线圈叫做core。用线圈做的内存叫做core me

2021-03-15 01:59:21 3073

原创 【C/C++】程序启动后马上停止,程序崩溃并出现core文件

博主是Linux C/C++开发,这篇文章用于记录工作中的一点经验QA提出这个bug后,交付我来修改,一开始我并没有复现此bug。但当我手速够快,程序一启动就马上停止时便会稳定复现根据生成的core文件,查看bt堆栈信息,可以锁定到线程的jion()处查看源代码if(pThread) { pThread->join(); delete pThread; pThread = nullptr;}第一步,修改join()为detach(),再尝试复现,但程序并未崩溃,由此推测线程卡

2021-03-03 16:51:59 553 1

原创 【Linux】git无法自动补全的解决办法

source /etc/bash_completion.d/git

2021-03-03 14:04:26 1048 1

原创 【Linux】常用抓包方式

1、网卡抓包tcpdump -i ens1f1 -s 0 -X -vvv -w 1.pcap当确定报文会通过ens1f1网卡时,便可以使用网卡抓包方式-i :指定网卡-s:snaplen,截断数据包。0表示不截断,默认只显示68字节-X:告诉tcpdump命令,需要把协议头和包内容都原原本本的显示出来-vvv:显示最详细的报文信息-w:将包写入文件中2、环路抓包tcpdump -i lo -s 0 -X -vvv -w 1.pcap当确定报文只在本地收发时,可以使用环路抓包,lo是l

2021-02-09 09:14:39 1953

原创 【C/C++】链接时报错:undefined reference to ‘xxxxxxxxxxxx‘ (对……未定义的引用)的解决办法

大致意思是这样:有一个类 class test,test.h 中有个static function() 和一个 static std::map M;现在在 test.cpp 中实现了 function ,并在函数中使用了 M ,但 M 报错 undefined reference to 'test::M';解决办法:需要在 test.cpp 中声明一下 std::map <> test::M;扩展:C++静态成员的使用C++中的静态成员(静态成员函数和静态数据成

2021-01-26 16:24:21 2137

原创 【SQL】No module named MYSQLdb 问题解决

问题描述:报错:ImportError: No module named MySQLdb对于不同的系统和程序有如下的解决方法:easy_install mysql-python (mix os)pip install mysql-python (mix os)apt-get install python-mysqldb (Linux Ubuntu)cd/usr/ports/databases/py-MySQLdb && make install clean (FreeBSD)

2021-01-08 10:23:02 381

原创 【C/C++】alloca、malloc、calloc、realloc的区别

一、内存分配方式:1、从静态存储区域分配内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量、static变量2、在栈上创建在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放,栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限3、从堆上分配,也称动态内存分配程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存,动态内存的生存期由用户决定,使用非常灵

2020-12-24 19:56:23 1220 1

原创 【Linux】addr2line调试so动态库

一、addr2lineaddr2line -e filename stackinfoeg:addr2line -e loaddate 0x4ae7e3addr2line的其他参数用法详情参考:so 动态库崩溃问题定位二、corefile coregdb filename coreeg:file core.61893 //由打印信息得知是loaddata的问题gbd loaddata core.61893 core的详细用法参考:Linux core 文件介绍...

2020-12-21 17:51:31 1592

转载 【Git】git pull origin master与git pull --rebase origin master的区别

区别:git pull=git fetch + git mergegit pull --rebase=git fetch+git rebasegit fetch : 从远程分支拉取代码,可以得到远程分支上最新的代码。所以git pull origin master与git pull --rebase origin master的区别主要是在远程与本地代码的合并上面了。现在有两个分支:test和master,假设远端的master的代码已经更改了(在B基础上变动:C,E),test的代码更改了要提

2020-12-03 20:11:38 11450

转载 【Git】git rebase 将远程最新稳定分支(master)的内容的同步到本地,且不与本地冲突

注:稳定分支大部分时候是master分支,但是不同的公司不同项目会有不同,本篇稳定分支为raw分支。场景:本地分支用到了公共组件中的东西,另一个同事更改公共组件后发到raw分支,并且本地分支需要用到更改后的代码。但是,本地开发了一些东西,这些代码并不成熟,并不希望提交,这时可以用stash即: raw分支中公共组件有变动,且我依赖这个公共组件,本地我的分支代码达不到提交条件。hy本地开发分支1、 git stash //提交到暂存区2、 git checkout raw // 切换到raw分支r

2020-12-02 18:58:05 4075

转载 【Git】ssh: Could not resolve hostname gitlab.123.com: Name or service not known

前一天可以拉取代码的slave机器,第二天就不能访问git了,,检查了公钥没有被重新生成,可key也在git项目上正常启用,那是咋回事呢,排查了一下,机器因为某些服务需要特殊配置所以直接调整了dns,导致域名无法识别。执行git clone时出现权限错误:# ssh: Could not resolve hostname gitlab.123.com: Name or service not known # fatal: Could not read from remote repository..

2020-11-26 09:20:25 9284

原创 【Linux】“unable to detect graphics environment”的解决方法

首先vim ~/.bashrc1、在末尾添加export DISPLAY=映射到另一台机器上的IP地址:0.0如:export DISPLAY=192.168.1.1:0.02、在末尾添加export PATH=你要映射的程序的路径:${PATH}如:export PATH=/home/clion/bin:${PATH}然后source ~/.bashrc最后重新打开一个新的终端即可启动:感谢StackOverflow的这个助攻Unable to detect graphics environm

2020-11-24 09:54:05 7319 1

原创 【SQL】SQL常用操作合集

1、删除列操作USE `db_name`; //注意这里的`是键盘左上角Esc下面的那个点ALTER TABLE table_name DROP COLUMN column_name;2、查询记录总数select count(*) from `schema`.table;3、排除某些条件select * from a where a.id not regexp `11|12|13`;//排除了a表的id列中,id=11、12、13的数据项...

2020-11-16 13:39:28 370

原创 【TCP/IP】MTU学习笔记

文章目录一、什么是MTU二、属于OSI哪一层三、有什么用四、为什么是1500五、针对不同的协议,MTU的值应有所调整六、结论一、什么是MTUMaximum Transmission Unit,缩写MTU,中文名是:最大传输单元。二、属于OSI哪一层MTU属于OSI-7层网络协议模型中的数据链路层协议三、有什么用MTU限制的是数据链路层的payload,也就是上层协议的大小,例如IP,ICMP等。举一个最简单的场景,你在家用自己的笔记本上网,用的是路由器,路由器连接电信网络,然后访问了www

2020-11-16 12:07:40 1396

原创 【C/C++】C++ char[]字符数组和string字符串拷贝之间的差异

如图所示

2020-11-13 17:45:43 357

原创 【C/C++】预处理器指令#pragma学习笔记

在所有的预处理指令中,#pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma 指令对每个编译器给出了一个方法,在保持与C 和C ++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。其格式一般为:#pragma para其中para 为参数,下面来看一些常用的参数。参数类型一、#pragma message二、#pragma code_seg三、#pragma onc

2020-11-12 16:41:58 634

转载 【Linux】error while loading shared libraries错误解决办法

默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件,通常通过源码包进行安装时,如果不指定–prefix,会将库安装在/usr/local/lib目录下;当运行程序需要链接动态库时,提示找不到相关的.so库,会报错。也就是说,/usr/local/lib目录不在系统默认的库搜索目录中,需要将目录加进去。首先打开/etc/ld.so.conf文件加入动态库文件所在的目录:执行vi /etc/ld.so.conf,在"include ld.so.conf.d/*.conf"下方增加"/

2020-11-12 09:03:45 4452

原创 【Git】git的一些实用技巧

在编译git库拉下来的代码时,往往会产生一些中间文件,这些文件我们根本不需要,尤其是在成产环节做预编译,检查代码提交是否能编译通过这种case时,我们往往需要编译完成后不管正确与否,还原现场,以方便下次sync代码时不受上一次的编译影响。git clean -f...

2020-11-11 11:05:37 132

glog库,编译好的,可直接使用

头文件库都有,release版本的,编译好的,设置的0积分,有使用问题可以私信我,欢迎交流~~~~~~~

2020-08-17

libcurl_x64_编译好的,可直接使用

debug、release版都有,x64位的,项目里添加头文件和库就能直接使用了,所需积分设置的0,有任何使用问题可私信我

2020-08-17

空空如也

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

TA关注的人

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