- 博客(80)
- 资源 (7)
- 收藏
- 关注
原创 pointer-like classes 开放智能指针
template<class T>class shared_ptr{public: T& operator*() const { return *px; } T* operator->() const { return px; } shared_ptr(T* p): px(p) {}private: T * px; long* pn;}pointer-like classes 开放迭代器template<class T,class Ref, cl
2022-01-23 16:28:49
233
原创 linux调试gdb core
#SIGSEGV 11 /* Segmentation violation (ANSI). */ 建立CORE文件,段非法错误ulimit -c unlimited #使用生成core文件#向程序发送11,建立core文件,段非法错误ps -aux |grep youappkill -11 pid#core文件生成位置/var/lib/apport/coredump#调试core文件gdb yourapp /var/lib/apport/coredump/core.**
2021-12-29 14:19:59
670
原创 clang+llvm+linux x86平台交叉编译arm64
下载工具链workPATH=`pwd`/toolchainmkdir -p $workPATHcd $workPATHURL_LLVM="https://github.com/llvm/llvm-project/releases/download/llvmorg-10.0.0/clang+llvm-10.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz"URL_GCC_LINARO="http://releases.linaro.org/components/to
2021-12-24 10:28:05
8924
5
原创 C++代码的编译流程
预处理→编译→汇编→链接预处理:预处理用于将所有的#include头文件以及宏定义替换成其真正的内容,预处理之后得到的仍然是文本文件,但文件体积会大很多。gcc的预处理是预处理器cpp来完成的,2.编译:这里的编译不是指程序从源文件到二进制程序的全部过程,而是指将经过预处理之后的程序转换成特定汇编代码(assembly code)的过程。汇编:汇编过程将上一步的汇编代码转换成机器码(machine code),这一步产生的文件叫做目标文件,是二进制格式链接:链接过程将多个目标文件以及所需的
2021-11-30 15:41:02
400
原创 linux平台交叉编译arm64库
1.构建工程时指定工具链cmake -DCMAKE_TOOLCHAIN_FILE=/home/…/gnu_arm64.cmake2.CMAKE_TOOLCHAIN_FILE 交叉编译文件#工具链文件 gnu_arm64.cmakeset( CMAKE_SYSTEM_NAME Linux )set( CMAKE_SYSTEM_PROCESSOR arm )SET(CMAKE_SHARED_LIBRARY_PREFIX "lib")SET(CMAKE_SHARED_LIBRARY_SUFFIX
2021-11-30 15:28:44
1101
原创 C++ 仿函数 function-like classes
仿函数 class ShorterThan { public: explicit ShorterThan(int maxLength) : length(maxLength) {} bool operator() (const string& str) const { return str.length() < length; } private: const int len
2021-11-29 21:01:36
410
原创 转换函数(conversion function)c++
conversion functionclass Fraction{public: Fraction(int num,int den=1) :m_numerator(num),m_denominator(den) {} operator double() const {//可以转换为double return (double)(m_numerator / m_denominator) }private: double m_numerator;//分子 double m_denomi
2021-11-28 11:39:07
353
原创 Linux+Tomcat+Mysql+Xwiki+Nginx配置
Tomcat操作基本安装操作:http://www.cnblogs.com/EasonJim/p/7202844.html/opt/tomcat8/bin/shutdown.sh 关闭tomcat/opt/tomcat8/bin/startup.sh 启动tomcatXwiki+Mysql的基本配置涉及Mysql数据库的下载安装,xwili库的下载.参考连接:https://blog.youkuaiyun.com/forrest_ou/article/details/68068685Nginx基本配
2021-11-22 11:41:08
2427
原创 C++ 类模板,函数模板,static,namespace
staticclass Account{public: static double m_rate;//类中声明 static void set_rate(const double &x) { m_rate=x; }};double Accoutn::m_rate=1.2;//类外定义int main(){ //调用静态函数的方式有两种 Account::set_rate(5);//通过class name调用 Account a;//通过object调用 a.set_r
2021-11-21 15:54:04
504
原创 String C++
简单实现c++ 的stringclass String{public: String(const char* cstr=0); String(const String& str); String & operator =(const String &str); ~String(); char * get_c_str() const { return m_data; }private: char* m_data;}//ctorinline String::St
2021-11-21 15:05:02
367
原创 C++堆栈管理
Stack (栈) heap(堆)Stack,是存放在作用域(scope)的一块内存空间(memory space).例如当你调用函数,函数本身会形成一个stack用来放置接收到的参数,以及返回值.程序自动清理在函数本身(function body)内声明的任何变量,其所使用的内存块都取自上述stack.heap,或所谓system heap,是指由操作系统提供的一块global内存空间,程序可动态分配,(dynamic allocated),从而获得若干区块(blocks).static 静态对象
2021-11-21 11:37:26
570
原创 构造,拷贝构造,赋值构造函数C++
String Class#ifndef __MYSTRING__#define __MYSTRING__class String{public: //big tree 三个特殊的函数 String(const char* cstr=0);//构造函数 String(const String &str);//拷贝构造 String operator =(const String &str);//拷贝赋值 ~String();//析构函数 内存析构 离开作用域
2021-11-20 23:29:40
382
1
原创 C++操作符重载
操作符重载类的所有的成员函数隐藏this指针.reference:传递者无需知道接收者是以reference形式接受.//成员函数操作符重载inline complex& __doapl(complex *this,const complex&r){ return *this;}inline complex & complex::operator+=(const complex& r){ return _doapl(this,r);}C3+=C2
2021-11-20 20:36:27
460
原创 针对protobuf版本冲突问题解决办法
通过#define 重命名命名空间#ifndef __PROTOBUF_PREFIX_H__#define __PROTOBUF_PREFIX_H__#define google my_google #define protobuf my_protobuf#define internal my_internal#define compiler my_compiler#define io my_io#define util my_util#define converter my_conve
2021-10-18 13:39:23
2591
原创 OpenSSL编译错误+CMake
编译调用出现错误# warning: gethostbyname is obsolescent, use getnameinfo() instead.# undefined reference to `getcontext'# undefined reference to `setcontext'# undefined reference to `makecontext'解决方案#cmake添加如下编译选择ADD_DEFINITIONS (-DOPENSSL_NO_ASYNC)ADD_DE
2021-10-18 10:26:46
777
原创 CMake设置使用OpenCV的静态库
#cmake变量BUILD_SHARED_LIB 是一个全局变量set(BUILD_SHARED_LIBS OFF)#例如设置使用opencv的静态库if(NOT DEFINED OpenCV_STATIC) # look for global setting if(NOT DEFINED BUILD_SHARED_LIBS OR BUILD_SHARED_LIBS) set(OpenCV_STATIC OFF) else() set(OpenCV_STATIC ON)
2021-10-11 13:46:32
1758
原创 CMake调用boost库
CMake调用boost的编译脚本cmake_minimum_required(VERSION 3.14)project(boost_python)set(CMAKE_CXX_STANDARD 11)#指定boost根目录set(BOOST_ROOT E:/local/boost_1_61_0)#设置不适用系统的的boost的库set(BOOST_NO_SYSTEM_PATHS ON)#设置使用静态的boost库set(Boost_USE_STATIC_LIBS ON)#查找boost库
2021-09-28 13:48:15
2374
原创 vim常用命令使用
vi操作1.跳到文本的最后一行:按“G”,即“shift+g” gg回到第一行2,跳转到指定的行:命令行模式下输入(n为指定的行号):(1)ngg / nG(2):n(3)vim +n filename(注意这里要输入 + 号)3,文本插入方式...
2021-09-22 17:18:18
185
原创 CMake+VScode+C++目录结构设计
目录结构设计src -------------源文件存放文件夹3rdPart -------------第三方库存放目录bin-------------可执行文件生成目录build -------------中间文件目录doc -------------文档存放目录test -------------测试程序文件夹CMakeLists.txt-------------编写CMake...
2021-09-07 16:31:13
265
原创 数字转汉字大写
std::string numTobig(std::string strA){ std::vector<int> vA; std::string result; map<int, string> num_map; map<int, string> unit_map; num_map.insert(_pair(0, "零")); num_map.insert(_pair(1, "壹")); num_map.insert(_pair(2, "贰")); nu
2021-09-07 10:44:50
151
原创 Linux下编写CMake
cmake_minimum_required(VERSION 3.10)set(PNAME sdk)option(BuildTest "build test" ON)SET(CMAKE_CXX_COMPILER "g++") #设置编译器(可选的有gcc,g++)set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin) #设置输出路径set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOUR
2021-09-06 14:27:16
180
原创 C++提高运行效率的操作,性能优化
1.绑定CPU核.为了尽可能地降低多线程间的耦合性以提高速度,我们让不同CPU核心执行不同的线程.2.堆空间使用固定内存.全局堆内存的分配和释放非常慢而且是不确定的。你不能确定内存管理需要消耗多长时间。降低由堆内存碎片(对于执行关键操作的系统尤为重要)造成的内存分配失败的可能性.3.去除冗余计算,提前计算.4.位运算代替乘法和除法操作.5.打开编译优化 ....
2021-08-19 14:37:12
1736
转载 c++单例模式
单例模式#include <iostream>class Singleton{public: ~Singleton(){ std::cout<<"destructor called!"<<std::endl; } static Singleton& get_instance(){ static Singleton instance; return instance; }pri
2021-08-19 11:34:42
75
原创 Linux通过vidpid找到摄像头对应的索引
准备条件安装udev: sudo apt-get install libudev-dev项目引入头文件:#include <libudev.h>项目添加:cmake添加udev库 libudev.so代码实现//get vidpid->index int GetCameraId(int &id,std::string vid,std::string pid){ struct udev *udev = NULL; struct udev_enumer
2021-08-19 11:19:22
1450
4
原创 c++11泛型编程多参数
1,泛型编程多参数情况的处理template <class T, typename... Args>int load_model(T* &member,Args... args) { member = new T(); auto code = member->load("参数", args...); if(M_OK != code) { throw std::string("SDK load error"); } else {
2021-08-13 14:27:18
545
原创 vs编译的程序依赖运行时的问题解决
Visual Studio编译出的应用程序会依赖一些与vs版本相关的动态库,需要安装运行时,系统才能正常运行.需要修改项目的配置属性:为 /MT,如上图所示.
2021-07-28 15:31:55
351
原创 生成支持xp可运行的程序
xp sp3以下的操作系统需要用vs2010工具集xp sp3以上系统例如在MFC的头文件targetver.h加入#define _WIN32_WINNT 0x0501#pragma once// 包括 SDKDDKVer.h 将定义可用的最高版本的 Windows 平台。// 如果要为以前的 Windows 平台生成应用程序,请包括 WinSDKVer.h,并将// 将 _WIN32_WINNT 宏设置为要支持的平台,然后再包括 SDKDDKVer.h。#include <WinSD
2021-07-22 13:30:27
244
原创 LNK2005 _DllMain@12 already defined in LIBCMT.lib问题解决
背景CMake自动生成工程,引入以前封装的类和头文件,出现了LNK2005 _DllMain@12 already defined in LIBCMT.lib等问题.解决将头文件:**#include “stdafx.h”**加入到没又此头文件的头文件.附录生成工程的CMakeLists.tx文件CMAKE_MINIMUM_REQUIRED(VERSION 2.6)set(PNAME yourProjectName)project(${PNAME})ADD_DEFINITIONS("-D
2021-07-22 11:24:21
348
原创 MFC或OCX添加自定义消息映射
背景//在编写OCX控件时,在线程中直接调用FireEvent相关的函数,js页面无法正常响应,//只能通过自定义消息映射,通过PostMessage发送消息,界面才能正常收到响应.FireEvent(eventidTakepicEvent, EVENT_PARAM(VTS_I4), lResult);PostMessage(WM_YOUR_EVENT, WPARAM, LPARAM);实现xxxxxCtrl.hprotected: afx_msg LRESULT onResult(WPA
2021-07-22 11:03:56
391
原创 Linux 打包可执行程序与SDK的所有依赖的so库
1.查询依赖so库查询动态库依赖的so库ldd libXXX.soldd yourExe2.拷贝依赖库到指定目录首先根据ldd查询依赖的so库,将依赖的so库拷贝到指定文件夹ldd your_server | awk '{print $3}' | xargs -i cp -L {} /home/name/bin/3.添加依赖库的指定路径#env.sh 指定当前路径为库的查找路径export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH4.pkg
2021-07-21 15:21:25
1151
原创 算法与数据结构-链表LeetCode
链表操作1,链表逆序-a leetcode 206整个链表进行逆序#include<stdio.h>struct ListNode{ int val; ListNode *next; ListNode(int x):val(x),next(NULL){}};class Solution{public: ListNode* reverseList(ListNode*head){ ListNode *new_head=NULL;//指向新链表的头节点的指针 while(
2021-07-19 10:33:26
144
3
原创 opencv图像画圆
将人脸框的矩形改为void drawEllipse(cv::Mat &display, const Rect &faceRect, const cv::Scalar &color, int debounce, float cw, float acw) { static auto origin = faceRect; if(std::abs(origin.left - faceRect.left) > debounce || std::abs(origin
2021-07-16 18:24:42
538
1
原创 windows动态加载dll库
loadLib.h#include<map>#include<Windows.h>#include<functional>#include<memory>#include<iostream>namespace kaa {class LibWrap {public: LibWrap (); ~LibWrap (); unsigned long load(std::string file); template<typen
2021-07-16 15:22:47
621
原创 YUV转换为RGB
void yuv2rgb_nv21(const unsigned char *src, unsigned char *dst, int src_width, int src_height, int src_step, int dst_width, int dst_height, int dst_step) { typedef unsigned char uint8; const uint8* pY; const uint8* pU; const uint8* pV; int Y00, Y01, U
2021-07-09 16:08:50
271
原创 cmake使用中出现动态库找不到的问题
link_directories需要在add_executable和add_library之前否则会导致动态库找不到
2021-07-06 19:20:54
2318
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人