自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 资源 (1)
  • 收藏
  • 关注

原创 教程:windows下使用vcpkg发布一个静态库(闭源)并使用

以一个很简单的例子,日志记录logtest为例,将以下代码做成静态库用vcpkg发布,并集成使用。vcpkg本身的安装和环境变量设置很简单,使用过程中遇到到的依赖项vcpkg会自动下载,如果遇到下载的慢的项可以手动下载然后按照规定的名称保存在downloads文件夹中即可,这里不再详细讲述。一、准备logtest源码及二进制github头文件.h:#ifndef __LOGTEST__H__#define __LOGTEST__H__#include <string>#includ

2021-07-02 15:42:34 1891

原创 c++(跨平台)实现高自由自定义变长参数日志输出(使用cout,非printf,无需格式化),打印变量名及变量值

运用了多项c++新语法(c++11\14\17)折叠表达式、正则表达式分割字符串、变长参数模板等。打印格式为:“文件名、行数、描述、变量名:变量值”,使用简单,仅需传递变量名即可。话不多说,直接上代码,解释见注释。...

2021-05-08 15:55:33 886

原创 git rebase 让你的一次提交的多个commit和问题一一对应

git rebase

2022-06-22 13:58:43 833 1

原创 函数模板和类模板

模板的意义:之前调用函数时,是变量参数化,而有了模板后,对类型也可以进行参数化了。template<typename T> // 定义一个模板参数列表 or template<class T>bool compare(T a, T b) // compare是一个函数模板{ return a > b;}int main(){ compare<int>(10, 20); // compare<int>是函数名

2021-10-26 15:12:50 176

原创 VS Code查看C++汇编

运行程序后,在监视变量中添加:-exec disassemble /m main或-exec disassemble /m然后在调试控制台就可以看到汇编代码了。

2021-10-22 10:07:46 6126 3

原创 const和一级、二级指针以及一级指针和引用的结合

const修饰的是离它最近的类型const int *p : 离const最近的是int,去掉int后,const修饰的就是 *p,代表 *p不能被改变,即p指向的数据不能被改变,p可以被改变重新指向别的内存。int const * p : 离const最近的是 *,但 *不是类型,所以离const最近的还是int,去掉int,修饰的就是 *p,也是代表 *p不能被改变。int *const p : 离const最近的是int *,去掉int *后,const修饰的是p,就是指针本身,代表p只能指向

2021-10-21 10:06:32 232

原创 c++ string和const char*在内存中的地址

int main(){ const char *p = "str"; string s = "str"; int a = 10; cout << "str:" << (&"str") << endl; printf( "p :0x%0x\n", p); cout << "s :" << (&s) << endl; cout << "a :" <<

2021-10-19 13:44:57 1489

原创 linux下使用tcpdump

linux系统中,会将DNS服务器地址存放在/etc/resolv.conf文件中。[*************]$ cat /etc/resolv.conf# Generated by NetworkManagernameserver 101.215.217.161.首先打开两个linux终端,在其中一个终端启动tcpdump监听。tcpdump需要在root用户下执行才能生效。[*************]$ sudo tcpdump -i eth3 -nt -s 500 port doma

2021-09-26 14:04:33 2277

原创 C++使用内部类实现一种Builder模式(属性内容不对外暴露, 不需管理指针)

假设我们一个生产车的工厂,每辆车有如下属性: 系列、颜色、载人数头文件如下:#ifndef TEST_H#define TEST_H#include <string>#include <memory>using namespace std;class Car{public: class Builder { public: Builder(const Builder &builderArg); Bu

2021-07-06 18:14:37 341

原创 c++(windows\linux交叉编译)编译sqlite源码

下载源码一.linux平台(1)x86_64进入sqlite-autoconf-3350500目录执行./configure CC=gcc AR=gcc-armake clean && make即可在lib文件中得到libsqlite3.a和libsqlite3.so(2)i686理论上只需要在./configure中执行CFLAGS=-m32即可,但是这样会报错,提示需设置host,最简单方法是x86_64编译完成后,直接打开生成的Makefile文件,找到CFLAG

2021-06-18 16:14:43 721

原创 使用基于C++11的线程池实现生产者-消费者模型(demo)

模型:一个输入触发的生产者线程,不断的生产数据,一个消费者背景线程,不断的取出数据,只有当取出数据处理成功后才将数据删除。线程池使用参考:https://www.cnblogs.com/lzpong/p/6397997.html代码很简单,源码如下:#pragma once#ifndef THREAD_POOL_H#define THREAD_POOL_H#include <vector>#include <queue>#include <thread&gt

2021-04-27 17:12:21 753

原创 c++将模板实现放在cpp,外部使用模板的方法(demo,gcc+msvc(动态库))

参考https://blog.csdn.net/mincheat/article/details/77987740一般情况,模板函数被外部其他引用会提示找不到函数,原因是:编译本身这个cpp的时候,没有发现有引用的地方,那么就不会被编译,而编译引用这个模板函数的其他cpp的时候,要直接调用这个函数,就会发现这个函数没有编译,没有实现,所以报错,找不到该函数。因此心生一计,是否可以写一个额外函数在本cpp中将该模板函数使用一下,外部就可以找到此函数了。适用场景:希望对外声明提供的头文件简单并隐藏实现。

2021-04-22 10:13:54 2739 3

原创 linux下使用atosl解析dylib

1.源码git clone https://github.com/facebookarchive/atosl2.直接make会编译不过,需要下载依赖文件:(1)libdwarf的头文件和.so(2)libiberty的头文件和.a(3)libswift的文件和.a3.根据编译错误修改makefile,编译成功后4.需传入是解析的dylib文件,和cpu_subtype,如果这个subtype传错的话,会导致无法解析。ex:./atosl -o xxx.dylib -arch arm64 0

2021-04-15 09:50:41 537

原创 linux下使用googlebreakpad解析dmp文件获取堆栈

1.下载google-breakpad源码git clone https://chromium.googlesource.com/breakpad/breakpad2../configure3.make4.进入src/processor目录,拷贝想要解析的dmp文件到该目录5.此处由于环境是ubuntu,执行script -f output.txt(将屏显输出到文件)再执行./minidump_stackwalk xxx.dump (符号表目录,可选)结果便存储到output.txt中了

2021-04-12 14:20:24 1467

原创 golang reflect demo讲解

Demo这里引用了第三方包go get github.com/influxdata/tomlgo install github.com/influxdata/toml就可以直接使用第三方代码了,可以修改,也可以打断点。package mainimport ( "fmt" "reflect" "github.com/influxdata/toml")type testInterface interface {}type testStruT struct { TestF

2021-04-09 15:43:44 131

原创 windows/linux/mac通过c++执行终端命令(或脚本)获取输出到字符串

void getOutbyCmd(const string &cmdStr, string &outStr){ FILE *fileStream = NULL; #ifdef WIN32 if ((fileStream = _popen(cmdStr.c_str(), "r")) == NULL) #else if ((fileStream = ::popen(cmdStr.c_str(), "r")) == NULL) #endif

2021-03-26 15:00:00 490

原创 gcc部分编译、链接选项解释

1.生成与位置无关的代码编译选项:-fPIC/-fpic:编译共享库使用-fPIE/-fpie:编译可执行程序时使用链接选项:-pie:需与以上编译选项配合使用2.静态库、动态库-shared:指定生成动态链接库。-static:指定生成静态链接库。...

2021-03-17 14:42:39 1273

原创 windows下多目录makefile demo讲解(VSCODE)

1.前提首先可以下载TDM-GCC或者Mingw-w64,然后找到make.exe的位置,可以将如下名字复制一份改成make.exe方便使用,记得加入环境变量。2.代码目录:每个文件均实现打印,方便证实最后生成出来的exe是运行结果。#include "bb.h"#include <iostream>using namespace std;void bb::funcbb(){ cout << "funcbb" << endl;}3.ma

2021-03-09 14:00:52 581

原创 golang chan demo讲解

无缓冲func testChan() { ch := make(chan int) // 不带第二个参数代表无缓冲,即如果放入了一个数据ch <- task 若没有取出数据的线程task := <-ch,线程将会挂起等待直到数据被取出 //启动固定数量的worker for i := 0; i < 5; i++ { go worker(ch) // go代表起一个协程并行运行,此处循环多少个,代表起了多少个协程执行任务 } //发送任务给worker t

2021-03-04 14:29:58 329 1

原创 golang flag包 demo讲解

func testFlag() { arg1 := flag.String("p1", "arg1 default value", "arg1 description help") arg2 := flag.String("p2", "arg2 default value", "arg2 description help") arg3 := flag.Bool("p3", true, "arg3 description help") flag.Parse() var cmd string =

2021-03-04 14:03:20 318 1

原创 VS201X更换平台Rebuild项目时,旧平台生成的发布件被删除

使用VS2012先用Win32 Rebuild项目,在输出目录outlib中生成了test.exe再使用x64 Rebuild项目,在输出目录outlib64中生成了test.exe,此时outlib中的test.exe不见了。解决:保证两个平台的Intermediate Directory(中间目录)配置不同x64:Win32:...

2021-02-03 16:32:36 106

原创 google-breakpad在Linux平台下各CPU编译

git clone https://chromium.googlesource.com/breakpad/breakpad1.x86_64执行./configure 得到Makefile文件。直接执行make即可。2. i686执行./configure CXXFLAGS=-m32 CFLAGS=-m32 CPPFLAGS=-m32如果报错configure: error: cannot run C compiled programs则代表需要交叉编译(在非32位机器上编译32位程序)假设

2021-01-27 14:13:00 1986 1

原创 error LNK2001: 无法解析的外部符号 问题解决思路

在引用了第三方库的lib时发生了一个错误如下:error LNK2001: 无法解析的外部符号“public: static void __cdecl google_breakpad::ExceptionHandler::HandlePureVirtualCall(void)”首先确保引用了lib文件,其次打印出lib的函数表:“C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.2702

2021-01-22 17:31:07 7513

原创 生成windows-arm64的curl、openssl、zlib发布件

因为没有适用于VS2017的arm64工具命令行,用x86命令行会报错“模块计算机类型“x86”与目标计算机类型“ARM”冲突。参考https://docs.microsoft.com/en-us/cpp/build/building-on-the-command-line?view=msvc-160&viewFallbackFrom=vs-2019发现了以下工具用everything搜索可以找到使用64位x64本机交叉工具来构建arm64。在普通命令行cmd中执行:就有了可以生

2021-01-21 14:45:49 717 1

原创 g++编译器内嵌汇编代码

最近要实现一个功能,获取系统的cpu信息,查阅网上的资料,如果是在VS20XX中可以用如下代码实现:using namespace std; //用来存储信息DWORD deax, debx, decx, dedx;static void ExeCPUID(DWORD veax) // 初始化CPU{ __asm { mov eax,veax cpuid mov deax,eax

2021-01-07 16:31:45 1043

原创 gcc源码编译中的问题处理过程

1.需求是想要gcc可以编译32位程序也可以编译64位程序,机器是64位的编译过程教程参考:https://www.quyu.net/info/782.html但是configure配置时不能配置–disable-multilib,如果配置了这个,64位的机器就不能编译32位的程序了。安装成功的gcc查出来如下:(…/configure --prefix=/usr/local/gcc-4.9.4 --enable-threads=posix --disable-checking --enable-mul

2021-01-05 09:57:22 1994

原创 arm-linux-gnueabi-g++ -v交叉编译器 版本能查到,使用sudo make时却提示command not found

参考:https://blog.csdn.net/yyyljw/article/details/103213385主要是/etc/sudoers第3个default把环境变量给重定义了1.sudo chmod 755 /etc/sudoers2.sudo vi /etc/sudoers在secure_path中添加:需要的环境变量(冒号隔开)3.退出后权限修改回来 sudo chmod 555 /etc/sudoers...

2021-01-04 15:33:35 425 1

原创 用makefile解决linux下静态库冲突问题

项目引入了多个三方静态库,其中包含的.o文件重名,但是幸运的是函数不重名,类不重名,因此只需要在ar时重命名.o文件即可。makefile中:tmp赋值为取出文件名(第一步去除目录和第二步去除后缀)makefile中for开始执行的是shell,所以取变量需要多加一个$转义,因为是shell,所以也无法使用notdir,basename等makefile中使用的函数,会提示找不到。然后再将所有.o文件都批量重命名就好了(加了第三方库名称区分)...

2020-12-25 16:13:31 686

原创 getaddrinfo返回值为7(EAI_NODATA),失败排查

常量 描述EAI_ADDRFAMILY 不支持hostname的地址族 1EAI_AGAIN 名字解析中的暂时失败 2EAI_BADFLAGS ai_flags的值无效 3EAI_FAIL 名字解析中不可恢复的失败 4EAI_FAMILY 不支持ai_family 5EAI_MEMORY 内存分配失败 6EAI_NODATA 没有与hostname相关联的地址7EAI_NONAME hostname或service未提供,或者不可知 8EAI_SERVICE 不支持ai_socktype类

2020-12-21 17:25:21 2305

原创 解决ubuntu下编译报错/usr/include/linux/errno.h:1:10: fatal error: asm/errno.h: No such file or directory

在ubuntu交叉编译i686时出现以下报错/usr/include/linux/errno.h:1:10: fatal error: asm/errno.h: No such file or directory#include<asm/errno.h>可通过创建软链接解决sudo ln -s /usr/i686-linux-gnu/include/asm /usr/include/asm前一个位置是交叉编译器的am路径后一个是执行路径 可以找到gnu的路径 在 该路径下创建asm即

2020-12-11 14:29:51 9873 2

原创 linux平台下编译报某些命令找不到解决思路

大体思路:用which找到核心命令位置 创建软连接eg1:i686-linux-gnu-g++ -vmake: arm-linux-gnueabihf-g+±4.9: Command not found1、没有装该编译器,需要先安装apt-cache search armhf 选一个版本 再安装sudo apt-get install g+±arm-linux-gnueabihf2、安装完后查看版本确认arm-linux-gnueabihf-g++ -v3、接下来同eg2eg2:arm-

2020-11-27 11:42:58 1188

原创 shell脚本和powershell脚本常用命令

# 获取文件的最后修改时间并格式化成相应字符串 mTime=`stat -c %Y $dir` dirTime=`date '+%Y%m%d%H%M%S' -d @$mTime`

2020-11-27 11:05:34 428

原创 jenkins调用VS201X

用Everything搜索MSBuild.exe,若在指定VS201X文件夹下搜索到了MSBuild.exe,则使用相应MSBuild.ex。因为较老的VS版本如VS2012,MSBuild.exe是保存在.NetFramework中的,所以对应的VS2012文件夹会没有MSBuild.exe。.NetFramework的版本可以根据具体VS项目的属性查到。在jenkins界面中Global Tool Configuration里可以按标签来保存MSBuild.exe的路径再根据需要如下设置即可,vcx

2020-11-25 18:20:59 291

原创 powershell下载网页,用7zip解压缩tar.gz文件

$httpPath = “http://xxxxxxxxxxx.tar.gz”如果是在cmd下执行powershell:powershell -Command “Invoke-WebRequest $httpPath -OutFile dstName.tar.gz”如果是在powershell下执行:Invoke-WebRequest $httpPath -OutFile dstName.tar.gz解压缩到当前文件夹& “C:\Program Files\7-Zip\7z.exe” x

2020-11-25 18:11:06 671

WPF做的颜色选择板ColorDialog

都知道WinForm下有自带的ColorDialog,很方便可以使用并选择想要的颜色,而WPF并没有自带的颜色选择器,这是我基于WPF写的一个颜色选择控件,可以直接添加项目作为一个ColorDialog使用,并有源代码,VS2010下开发,可正常运行,有42个已有模板颜色,也可通过4个text值改变颜色的4个属性,也可通过4个颜色(R,G,B,A)条拖动改变颜色,功能比WinForm自带的更完善以及美观。

2016-03-13

空空如也

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

TA关注的人

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