自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 资源 (3)
  • 收藏
  • 关注

原创 windows下MinGW编译openssl库(64位、32位)图文解析

Window下使用MinGW编译OpenSSL源码(图文解说),生成64、32位动态库。

2022-06-04 15:29:17 5217 7

原创 windows 下MinGW的选择和安装笔记

MinGW的安装、版本选择

2022-06-03 19:59:12 1310

原创 CLion Bug集合1:windows下导入openssl库方法以及踩过的坑

系统:win10 64位工具链:MinGWIDE:CLionopenssl库下载下载方法主要有两种方式(推荐使用方式1)下载地址:http://slproweb.com/products/Win32OpenSSL.html下载源码,自己编译(windows下很难操作,本人能力有限没编译出来……只能贴出源码地址)在OpenSSL的github地址上下载源码:https://github.com/openssl/openssl步骤图解1. 使用方式1下载方式进入http://slp.

2022-05-09 17:26:10 2140 3

原创 Ubuntu CLion 使用CMakelists.txt 编译32位程序

项目场景:提示:这里简述项目相关背景:例如:项目场景:示例:通过蓝牙芯片(HC-05)与手机 APP 通信,每隔 5s 传输一批传感器数据(不是很大)问题描述:提示:这里描述项目中遇到的问题:例如:数据传输过程中数据不时出现丢失的情况,偶尔会丢失一部分数据APP 中接收数据代码:@Override public void run() { bytes = mmInStream.read(buffer); mHandler.obta

2022-04-27 16:01:11 1170

原创 C++11学习总结5——右值引用

右值引用、移动语义、move函数、forward完美转发函数笔记

2022-04-14 16:03:20 884

原创 C++11学习总结4——可变参数模板

可变参数模板C++11增加了可变参数模板,这就可以让函数的括号内输入任意个参数。可变参数模板知道有即可,不常用。函数模板参数包迭代方式展开(推荐使用)语法void func(){} //必须有一个同名的重载函数在前面!template<class...T>void func(T... args){}举例://如果这个同名的重载函数在函数模板前没有声名就会报错:未匹配到func函数void func() { cout << "结束" << endl

2022-04-14 15:46:46 758

原创 C++11学习总结3——类的改进

C++11新特性:委托构造、final关键字、override关键字、=default、=delete

2022-03-30 14:34:07 529

原创 C++11学习总结2——易用性改进

C++11新特性:for循环、static_assert静态断言、noexcept修饰符、nullprt空指针、强类型枚举、constexpr常量表达式、字面量重定义、原生字符串字面值、{}初始化对象

2022-03-30 14:28:58 745

原创 C++11学习总结1——类型推导

类型推导auto自动推导概念拥有自动推导数据类型的功能语法:auto 变量名 = 表达式;举例:原来:C++定义变量的方式int num = 10;​ 现在:可以对数据类型推导auto num = 10;使用方法:修饰变量时,和const类似,在定义时就必须初始化 可以作为函数的返回类型,则会自动推导 用途:​ 对于繁琐的数据类型可以使用auto,以此缩减代码量,比如for(vector<int>::iterator it = v.begin(); it != v

2022-03-30 14:15:22 460

原创 C++重学(9)——异常捕获和处理

程序异常抛出和处理异常处理分类方法功能用法noexcept修饰符(拓展:noexcept也可作为运算符)(C++11)debug模式下发现异常终止程序修饰一定不会错的函数throw函数主动抛出异常放在try中抛出异常assert函数debug模式下程序运行中发现逻辑为假时终止程序处理程序运行中逻辑判断程序是否继续运行static_assert函数(C++11)debug模式下程序编译中发现逻辑为假时终止程序编译在编译层面就可以进行逻辑判断,从而终止

2022-03-07 14:47:17 673

原创 C++重学(8)——智能指针

智能指针属于STL的智能指针,头文件<memory>智能指针分类unique_ptr 独享所有权(单个智能指针指向一块内存)shared_ptr共享所有权(多个智能指针指向同一块内存)unqiue_ptr创建方式语法 :构建方法说明std::unique_ptr<T> 智能指针变量名;创建空的智能指针std::unique_ptr<T> 智能指针变量名(new T);创建类型为T的智能指针std::unique_pt

2022-02-25 10:29:12 820

原创 C++重学(7)——vector容器

vector容器概念和数组非常相似vector可以动态扩展,但是数组不行指向一片连续的内存动态扩展是找个新的更大的空间来存放数据,而不是在后面接上新空间迭代器失效的情况:当vector找到新的更大的空间时,以前的迭代器就失效了构造方法作用vector v;采用模板实现类实现,默认构造函数vector(v.begin() , v.end())将v[begin(),end())区间中的元素拷贝给本身(注意是前闭后开)vector(n, elem)构造函数

2022-02-07 17:18:02 1485 3

原创 C++重学(6)——string容器

string容器概念本质:类和char* 的区别:string内部有个char*,并且封装了很多方法迭代器类型:随机迭代器(可用于标准算法、支持[]访问、-n、比较大小)常用方法构造方法作用string();创建一个空字符串,如string str;string(const char* s)使用字符串s初始化string(const string& str)使用一个string对象初始化另一个string对象string(int n ,cha

2022-02-07 15:34:35 2323

原创 C++重学(5)——谓词、内建函数对象

这里写自定义目录标题欢迎使用Markdown编辑器# 系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器# 系列文章

2022-01-28 17:16:08 766 1

原创 C++重学(4)——运算符重载

运算符重载概念:运算符也可以发生运算符重载内置数据类型不能滥用运算符重载(毕竟你不能让 1 + 1 = 3)一般运算符重载用于自定义数据类型语法返回类型 operator运算符(参数1,参数2……)+运算符示例 A A::operator+(const A& Obj)#include <cstdio>#include <iostream>using namespace std;class A {public: A(int a_val,int

2022-01-28 15:59:51 627

原创 C++重学(3)——深拷贝、浅拷贝问题

深拷贝、浅拷贝问题概念浅拷贝:简单的赋值拷贝操作 (有指针时注意)深拷贝:在堆区申请空间,进行拷贝操作浅拷贝出现时机默认拷贝拷贝构造(即只要出现默认拷贝构造就是浅拷贝,一下是拷贝构造出现时机)一个对象以值传递的方式传入函数体一个对象以值传递的方向从函数体返回一个对象需要跳过另一个方式从函数体返回默认的operator=函数中浅拷贝危害很容易带来堆区重复释放问题,重复释放堆区内存容易造成程序崩溃。问题常出点在于类中有指针时出现,如果不做深拷贝处理,一遇到浅拷贝,在析构时程序极

2022-01-28 14:06:57 398

原创 C++重学(2)——三种传参方式

C++传参方式分类值传递指针传递引用传递区别值传递:不会修改实参指针传递:会修改实参引用传递:会修改实参示例#include <cstdio>#include <iostream>using namespace std;void MySwapFunc1(int a, int b){ int temp = a; a = b; b = temp; cout << "值传递方式——函数中: " << "a = " <&l

2022-01-28 13:44:45 1075

原创 C++重学(1)——const修饰

const修饰记法:const修饰的是*就表示指针指向的值不可以改,const修饰p就表示指针不能改,用法分类名称示例解释常量指针const int *pconst修饰 * ,所以指针指向的值不能改变指针常量int * const pconst修饰 p ,所以指针的指向不能改变常量引用const int& num = 10;const修饰 引用 ,所以指针的指向和指针指向的值不能改变常对象const 类名 对象名const修饰对象,所以不

2022-01-28 11:43:18 529

原创 Bug2:python64位打包程序无法在win7 32位上运行

主要解决两个问题1、64位python打包的程序无法在32位windows7上运行时遇到的:“此文件的版本与正在运行的Windows版本不兼容,请检查计算机的系统以了解需要x86(32位)还是x64(64位)版本的程序,然后联系软件发布者。”2、win10打包应用程序在win7运行弹窗报错说缺少api-ms-win-core-path-l1-1-0.dll

2021-08-10 18:08:59 9337 12

原创 python Bug集合1:python导入VS生成动态库报错OSError: [WinError 193] %1 不是有效的Win32 应用程序

项目场景:32位python调用C++动态库问题描述:编译报错OSError: [WinError 193] %1 不是有效的Win32 应用程序

2021-08-09 17:29:22 582

原创 数据结构和算法学习笔记(3)——线性表结构(顺序结构和链式结构)

主要记录顺序结构和链式结构的区别和他们常用的操作。

2021-03-19 15:05:18 219

原创 数据结构和算法学习笔记(2)——算法时间复杂度

1、算法时间复杂度的定义系统执行次数就为时间。算法的时间量度语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。记作T(n)= O(f(n))表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同2、确定时间复杂度的方法这里主要有三个方法用常数1期待运行时间的所有加法常数保留最高项去除最高项的系数示例1:常数阶 O(1)int n = 0, s = 0;n = 100;s =

2021-03-18 14:49:51 338

原创 数据结构和算法学习笔记(1)——绪论

数据结构绪论1.1、逻辑结构逻辑结构名称概述集合结构数据元素除了同属于一个集合外就没有其他的关系线性结构数据都是一对一连起来的树形结构数据之间存在一对多的关系(一对一、一对多)图型结构多对多的结构1.2、物理结构物理结构就是如何把数据元素储存在计算机的存储器中物理结构名称概述顺序存储结构就类似C语言中的数组,元素在存储的时候是一个一个挨着排队的链式存储结构把元素放在任意的存储单元里,这些单元可以连续也可以不连续,类似C

2021-03-18 00:53:05 85

原创 QT结合FFmpeg学习笔记(6)——抽取音视频数据

1.主要的API函数主要初始化一个数据包结构体av_init_packet();在多媒体文件中找到需要的流av_find_best_stream()拿到流后获取数据包和相关操作//注意名字,是av_read_frame,但是是读包,这是历史遗留问题。av_read_frame() //获取流中的数据包av_packet_unref() //减引用数,引用计数为零就释放资源作用:函数1:获取流中的数据包。函数2:在av_read_frame()使用完之后就要调用这个函数,将

2020-10-18 21:18:34 523 1

原创 QT结合FFmpeg学习笔记(5)——获取音视频信息

音视频解码最重要的第一步骤解决QT中av_dump_format无法输出信息的问题。

2020-10-15 11:21:41 1106 1

原创 QT结合FFmpeg学习笔记(4)——基本概念

1. 基本概念多媒体文件是一个容器在容器里面有很多流(Stream/Track),比如音频流,视频流,字幕流。每一种流是有不同编码器编码的从流读出的数据简成包在一个包里面包含着一个或者多个帧2.几个重要的结构体AVFormatContext 格式上下文他是连接多个ffmpegAPI的一个桥梁。比如:在处理流的时候就要传入这个结构体,有了这个上下文,我就知道我要处理的是这一个多媒体文件,而不是其他的多媒体文件。AVSteam通过这个结构体来获取流。AVPacket有了流就可以

2020-10-14 22:50:02 185

原创 QT结合FFmpeg学习笔记(3)——操作目录

概述:主要是在Linux中的使用。重要的目录操作函数avio_open_dir(); //打开文件//两个参数,第一个为操作目录上下文指针的指针//第二个为访问目录//第三个NULL//返回值>=0为成功avio_read_dir(); //对文件读写avio_close_dir(); //关闭文件重要的操作结构体AVIODirContext //操作目录的上下文,用于存储目录信息AVIODirEntry //目录项(就是目录下每一个项,相当于shi),用于存放文件名,

2020-10-14 21:39:43 237

原创 QT结合FFmpeg学习笔记(2)——文件操作(删除和重命名)

概述:这则笔记主要是写使用ffmpeg来去删除、重命名文件名(这是ffmpeg帮我们封装好的函数接口)。在QT中的话可以使用(感觉会出点小问题),但是使用QT自带的一些文件操作来实现会快很多。下面是在linux系统中的使用。步骤头文件#include <libavformat/avformat.h>这个头文件包含关于文件类和目录的操作函数都在这。删除文件函数 avpriv_io_delete();参数为文件地址返回值>=0表示成功,否则表示失败。重命名文

2020-10-14 01:24:20 353

原创 基于Arduino的智能泡茶机(2)——代码与解析

主控Arduino代码和Uno板的代码

2020-10-14 01:16:01 884 4

原创 QT结合FFmpeg学习笔记(1)——日志系统(下相当于是QT中的qDebug打印)

根据视频中的讲解,这个函数类似于是printf()函数的存在,但是在QT中printf()是打印不出任何东西出来的。在QT中我们完全可以使用qDebug来代替。是下面是在linux系统中的使用。步骤头文件:include <libavutil/log.h>设置日志级别av_log_set_level(AV_LOG_DEBUG);那些需要打印出来,那些不用打印出来,比AV_LOG_DEBUG级别高的就会被打印出来。打印日志 av_log(NULL,AV_LOG_INFO

2020-10-14 00:41:38 307

原创 基于Arduino的智能泡茶机(1)——机械系机械创新比赛总结技术点与不足处

机械创新比赛的总结,记录在使用单片机Arduino和电路布置设计上出现的问题和控制舵机转速问题。主要解决了舵机控速问题。由于我主要是负责控制单片机,所以在手机和泡茶机的连接上的总结较少。

2020-09-17 22:05:55 2778 3

原创 QT结合FFmpeg音视频解码(学习笔记)——环境搭建、分析reference to ‘avcode_configuration‘问题

1、关于QT如何搭建ffmpeg的环境2、遇到的undefined reference to 'avcode_configuration'和undefined reference to 'avcodec_version‘的解决方法

2020-08-06 18:13:31 1500 2

原创 Linux基础——文件I/O(open、read、write的使用)

文件I/O的基本概念、open/close函数的运用

2020-08-04 18:27:11 236

原创 Linux——Bug:基于Linux的Live555不能获取ip地址

在网上看了很多博主关于Live无法获取IP的方式,10篇里面9篇都是一样的,博主给出自己的设置,然后也没有说根据自己的怎么改,反正像我我这种菜鸟是改不明白。临时获取IP的方式当我们运行Live555服务器的时候,有的人就是会出现我下面的这种情况。出现这种情况就是表示你的Live555无法获取IP。然后我们可以输入指令service iptables stop来暂时关闭防火墙,这种方式就可让Live555服务器获取到IP。具体成果可以看下面的图。但是使用这种方式的话, 你关机重启之后,你再执行L

2020-07-02 19:16:03 255

原创 Linux网络编程——线程池架构

线程池概念及用途概念:实质就是一个装着线程的的容器,线程池一种多线程的处理方式,处理过程间任务添加到队列,然后创建线程后自动启动这些任务。比喻:这有点像去街上借的共享充电宝,收集这些充电宝的盒子就是线程池,充电宝就是线程。每个人去拿共享充电宝,就相当于是充电宝接任务。从这个比喻可以知道,共享充电宝收集盒(线程池)里面要先有一些充电宝(已经创建好的线程)才行。为什么要有线程池:节省资源,每次来一个客户端都要创建、销毁、运行,这会消耗大量资源(因为创建和销毁会占用时间)。如果提前创建好一堆线程

2020-06-30 14:31:50 354

原创 Linux网络编程——高并发服务器之epoll模型

epoll模型是现在主流应用的一种模型,比如王者荣耀、LOL等

2020-06-25 16:16:12 404

原创 Linux网络编程——高并发服务器之select模型

1、前言1.1、IO模型下面用服务器比成车站,客户端比喻成小明。传统阻塞模型:小明去车站买票,没买到票就在车站等待,直到有车票为止。非阻塞模型:小明去车站买票,没票的话,他没过一段时间就去看看有没有票,没有票就回去。他消耗了来回的这一个过程,但是不用等待。多路转接IO复用:委托黄牛来购票。select模型就是属于这一类。下面我用两张图来描述两种 1.2、select模型概念select能监听的文件描述符个数受限于FD_SETSIZE,一般为1024,单纯改变进程 打开的文件描述符个数

2020-06-23 09:54:15 361

原创 Linux基础——线程同步之信号量

1、概念进化版本的互斥锁,在互斥锁中,我们用的是两个线程,而这个信号量是可以N个线程。本质是一个计数器既可以在线程中使用,也可以在进程中使用他和管道不同在于,他主要是保护数据,而不是传输数据,他是为了在某一个时刻只有一个线程(或进程)来对数据进行操作。2、原语sem_tsem_initsem_waitsem_trywaitsem_timedwaitsem_postsem_destroy...

2020-06-21 21:17:09 443

原创 Linux基础——线程同步之条件变量

1、条件变量条件变量必须配合着互斥锁使用,互斥锁查看-》线程同步(互斥锁)1.1、条件变量概念条件变量是什么:本身不是锁,满足某个条件,像加锁一样,造成阻塞,与互斥量配合,给多线程提供会所。为什么要用条件变量:在线程抢占互斥锁时,线程A抢到了互斥锁,但是条件不满足,线程A就会让出互斥锁让给其他线程,然后等待其他线程唤醒他;一旦条件满足,线程就可以被唤醒,并且拿互斥锁去访问共享区。经过这中设计能让进程运行更稳定。1.2、条件变量控制原语pthread_cond_t 用于创建条

2020-06-20 21:29:48 951

原创 Linux基础——线程同步之互斥锁

线程同步的必要性      在线程当中,变量是可以被共享的,那么我们在不同的线程,对同一个变量进行操作的时候就会出现一些问题:两个线程同时对一个变量操作(假如对一个变量i进行加1),有可能就会出现数据混乱(即每线程对i+1但是结果不是真正的结果),注意:线程是并发的,出现这种情况很正常。下面写个例子演示一下。#include <stdio.h> #include <stdlib.h> #include <pth

2020-06-20 20:06:45 519

基于Arduino的智能泡茶机部分源码

这是我在机械创新中项目中写的部分源码,逻辑简单,主要是硬件和接线方面有些困难,毕竟机械创新中主要是以机械为主,控制部分只是辅助!

2020-09-17

1.1Fedora安装.docx

这里面写了Fedora虚拟机的具体安装方法。正常情况按照,这步骤就可以完成安装。需要的是VMware Workstation Pro软件

2020-06-05

tcpserver.c

使用平台:Linux终端 使用方法:编译代码cd tcpserver.c -o tcpserver 执行服务器代码 ./tcpserver

2020-05-25

空空如也

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

TA关注的人

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