- 博客(35)
- 收藏
- 关注
原创 交叉编译三方库时不生成动态库
在x86架构下交叉编译liblog4cpp库时,x86执行./configure && make 可以正常生成动态库,但是交叉编译时执行./configure --host=arm时只生成了.a的静态库,查看config.log,进一步发现“ checking if libtool supports shared libraries”返回 no,分析原因是因为指定的–host=arm时太过草率,config 在check的时候,发现CC使用的是arm-poky-linux-gnueabi-gcc,而不似乎a
2024-06-19 09:56:22 270
原创 gdb源码路径修改
则可以通过----directory(dir) dirName来指定,可以把相对目录变为绝对路径,例如。这时候运行就会自动把root替换成home,就可以正确查找路径。./src/a.cpp 没有那个文件或目录。/home/test/src 中。那么可以在运行环境的gdb中设置。而运行环境的源码放在了。
2024-03-25 16:35:37 682
原创 linux网络常用指令和工具
linux网络常用指令和工具netstat命令,可以查看当前的网络连接状态常用指令,netstat -nal | grep “ip:port” 可以查看某个ip和端口的状态iftop 命令,可以查看某个ip和端口的带宽iftop -i eth19 -f ‘dst host 198.18.35.4 and dst port 5559’UDP流量回放工具:https://gitee.com/fly542/udpreplay/blob/master/src/udpreplay.cppwireshar
2024-03-08 15:47:56 437
原创 CmakeList教程
cmake 是一个跨平台、开源的构建系统。它是一个集软件构建、测试、打包于一身的软件。它使用与平台和编译器独立的配置文件来对软件编译过程进行控制。它会通过写的语句自动生成一个MakeFile,从而实现高效编译。
2024-01-22 11:04:23 2822
原创 ROS操作系统
ROS全称叫机器人操作系统(Robot Operating System, ROS),虽然它叫操作系统,但实际上和我们认识的linux、mac、windows不一样,它是基于ubuntu(linux)上运行的一套框架,我们编写的ROS程序都基于这套框架上运行。对于ROS系统,有一个重要的概念叫 “节点”,其实每个节点就是单独的一个程序,比如处理摄像头、雷达、电机等,都可以由不同的开发人员独自写一个程序运行并关联(通信),他们也都有一个属于自己的二进制文件。
2023-12-19 17:42:52 2634
原创 检查内存泄漏
检查程序内存泄漏的办法先看以下一段代码#include <mcheck.h>#include <stdio.h>#include <stdlib.h>int main(){ char *p = malloc(10); char *p1 = malloc(10); return 0;}很明显我们malloc了一块空间后没有free,存在内存泄漏,那么怎么检测呢。再看下面的代码#include <m
2022-03-25 16:34:52 619
原创 字母大小写转换
如何实现不论输入大写还是小写都统一转换为大写或小写大小写字母转换除了十进制加减的方法还有就是位运算大小写统一转换为小写:可以把字母统一或上16进制的0x60,例如’A‘ | 0X60,得出的就是小写的’a’,当使用’a’ | 0x60时,得出的结果还是’a’大小写统一转化为大写:可以把字母统一与上16进制的0x60,例如’A‘ & 0Xfd,得出的就是大写的’A,当使用’a’ | 0xfd时,得出的结果还是’A’...
2022-02-22 15:22:17 2226
原创 gdbserver的使用
gdbserver的使用当我们的代码很大时,我们的虚拟机或板子并不能装载完整的、带符号表的代码,多数时候我们会使用strip去掉可执行文件的调试信息,这将使我们的代码大小减小许多。但这时如果代码出现了问题,就不能使用gdb来进行调试了,这时候就需要用到gdbserver。一.准备工作假设我们又两个虚拟机A和B,我们出问题的代码在A上。那么就需要在A上安装gdbserver,B上安装gdb,注意gdbserver的版本和gdb的版本要尽可能的一致,否则可能会出现符号表不能装载等问题。具体安装步骤就不写了
2022-02-09 14:33:31 2289
原创 git的基本使用
git的基本使用如何在一个分支上创建一个分支先克隆一个项目git clong再转移到到你需要在哪个分支新建的分支上,比如你现在在master上,你想在demo这个分支的基础上创建一个demoTest的分支$ git status位于分支 master您的分支与上游分支 ‘origin/master’ 一致。无文件要提交,干净的工作区$ git checkout demo把分支切换到demo上分支 gaodian 设置为跟踪来自 origin 的远程分支 gaodian。
2022-01-20 15:35:04 691
原创 网络地址和广播地址的计算
如何计算网络地址和广播地址如果一个IP地址为132.119.100.200的子网掩码是255.255.255.240,那么他的网络地址和广播地址是多少?网络地址的计算规则为IP地址和掩码进行与运算IP地址换成2进制为10000100.01110111.01100100.11001000子网掩码转换后为 11111111.11111111.11111111.11110000把他们按位进行与(全1才为1)运算后得出:10000100.01110111.01100100.11000000转换成十进
2021-11-19 00:06:54 13497
原创 ARP详解
ARP地址解析协议详解文章目录ARP地址解析协议详解一、什么是ARP?二、ARP帧的格式三、ARP的基本工作流程1、当目的地址和发送方在同一网段2、当目的地址和发送方在不同网段一、什么是ARP?当一个应用层的数据在网络中传输时,会被逐步封装成链路层的帧,而帧是通过链路层的MAC地址进行定位传输的,那么一个初次通信的主机如何知道对方的MAC地址呢,这时候就需要ARP地址解析协议来获取对方的MAC地址,ARP是提供网络层地址(IP地址)到相关硬件地址(MAC)的映射。二、ARP帧的格式1.在这个
2021-11-09 09:22:27 3994
原创 OSI参考模型第三层:网络层协议之IPV4
OSI参考模型第三层:网络层协议之IPV4文章目录OSI参考模型第三层:网络层协议之IPV4一、网络层的职责二、IP协议的特点三、IPv4协议一、网络层的职责网络层位于OSI七层协议中的第三层,他在链路层的基础上为传输层提供服务。网络层的职责是提供逻辑地址,供路由器确定路径。它通过路由选择算法,为分组通过通信子网选择最适当的路径,以实现网络的互连功能。具体地说,数据链路层的数据在这一层被转换为数据包,然后通过路径选择、分段组合、流量控制、拥塞控制等将信息从一台网络设备传送到另一台网络设备。网络层负
2021-10-19 15:59:09 2205
原创 shell脚本
shell脚本基本知识shell脚本既是一种命令语言,又是一种程序设计语言。简单的说它可以以一种有逻辑的形式来执行一些终端的指令或其他操作,比如用循环或判断等方式来对文件进行创建或修改删除等操作。(执行shell脚本必须要有可执行权限,用chmod +x 脚本名 可以给脚本加权限)一:shell的格式第一行"#! /bin/bash"(必须要写)在 Linux 中,以"#“开头的一般都是注释,不过这句话是例外的。这句话的作用是标称我以下写的脚本使用的是 Bash 语法,只要写的是基于 Bash 的
2021-09-20 18:11:18 141
原创 Linux目录结构
Linux根目录下的目录结构当我们打开一个终终端进入根目录cd /可以看到以下目录树状目录结构是这样的/bin:bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令/boot:这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。/dev :dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。/etc:etc 是 Etcet
2021-09-16 14:42:01 1359
原创 树莓派mjpg解决ERROR opening V4L interface: No such file or directory的问题
一、执行下面命令system("/usr/local/bin/mjpg_streamer -i \"/usr/local/lib/mjpg-streamer/input_uvc.so -n -f 30 -r 1280x720\" -o \"/usr/local/lib/mjpg-streamer/output_http.so -p 8080 -w /usr/local/share/mjpg-streamer/www\" &");报错:MJPG Streamer Version: git r
2021-07-12 00:09:14 3151 6
原创 socket,tcp,http三者之间的区别和原理
文章目录一、socket,tcp,http三者之间的区别和原理下面的图表试图显示不同的TCP/IP和其他的协议在最初OSI模型中的位置:二、总结一、socket,tcp,http三者之间的区别和原理下面的图表试图显示不同的TCP/IP和其他的协议在最初OSI模型中的位置:【应用层】 HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS、RTSP、XMPP、Whois、ENRP等【表示层】 XDR、ASN.1、SMB、AFP、NCP等【会话层】 ASAP、T
2021-06-28 18:42:43 423 1
原创 指针作为参数传递
文章目录一、当指针作为形参传递二、提示一、当指针作为形参传递当指针作为形参传递时,如何在子函数中修改指针所指向的字符串常量内容呢.看以下测试代码void test(char *p){ p = "666";}int main(){ char *p = "test"; test(p); printf("%s\n",p); return 0;}以上代码指针P本来指向的是字符常量区的test的空间,现在把P这
2021-06-27 21:36:45 6081 3
原创 指针+1(指针++)
指针 +1(指针++)问题我们都知道指针存放的是内存的一块地址,那么(指针++)意思是指针的地址+1吗 int a = 2; int *p = &a; printf("%p\n",p); printf("%p\n",++p);结果为0x7ffc87cd74ac0x7ffc87cd74b0我们可以看出指针+1后实际地址移动了4个字节,也就是一个int型的大小。所以我们可以得出这样一个结论,指针++(指针+1)移动的大小由指
2021-06-26 21:40:36 4382 2
原创 软链接与硬链接
Linux软连接的使用提示:在Linux中,我们用ls -l查看文件详情经常会看到比如libwiringPi.so -> libwiringPi.so.2.50这样带箭号的东西,这就是软链接一、什么是软连接?软链接又叫符号链接,相当于Windows的快捷方式,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。也就是说,它可以为某一个文件再另一个不同的位置创建一个链接。最常用的参数是-s二、使用方法具体使用方法是:ln -s 源文件名 要创建的
2021-06-16 16:15:05 262
原创 PATH和LD_LIBRARY_PATH的区别
PATH和LD_LIBRARY_PATH本质都是变量,所谓变量的意思就是由别人赋值产生的,直觉往往会让我们添加和减少这个变量本身的某些路径,实际上这是不正确的。正确的做法是我们要去修改赋予这个变量数值的那些配置文件,加一条路径或者减一条。说到底变量只关乎显示,不关乎其用于显示的内容。查看当前环境变量:echo $PATHPATH: 可执行程序的查找路径设置:方法一: export PATH=“绝对路径” 但是登出后就失效方法二:修改/.bashrc或~/.bash_profile或系统级别
2021-06-15 22:55:30 674
原创 泛型的概念使用
提问:如果我们需要产生多个对象,每个对象的逻辑完全一样,但是对象内的成员变量类型不同,要怎么写代码呢。class test1{ int a; void assignment(int a){ this.a = a; } void print(){ System.out.println(a); }}class test2{ String a; void assignment(String a){ this.a = a; } void print(){ Syste
2021-06-15 22:49:51 100
原创 多态的概念及instanceof的使用
一、什么是多态1、多态的概念多态是指同一个操作作用于某一类对象,可以有不同的解释,产生不同的执行结果Java作为面向对象的语言,同样可以描述一个事物的多种形态。如Student类继承了Person类,一个Student的对象便既是Student,又是Person。多态体现为父类引用变量可以指向子类对象。多态的定义为( 父类类型 变量名 = new 子类类型() )2.多态存在的三个必要条件:需要存在继承和实现关系(一定有父子关系)同样的方法调用而执行不同的操作、运.
2021-06-05 15:21:37 312
原创 抽象类接口与内部类和匿名内部类
文章目录一、抽象类和模板方法模式二、接口三、内部类1、内部类的概念2、内部类的特点3、成员内部类三、匿名内部类1、匿名内部类的特点2、语法一、抽象类和模板方法模式java中可以定义没有方法体的方法,该方法由子类来具体实现该没有方法体的方法我们称为抽象方法,含有抽象方法的类我们称为抽象类抽象方法的特点:只有方法头没有方法体的方法称为抽象方法抽象方法用abstract来修饰抽象方法代表一种不确定的操作行为抽象方法不能被调用抽象方法只能放在抽象类中抽象类的特点:定义中含有抽象方法的类
2021-06-04 18:10:41 495
原创 Java继承
文章目录Java继承一、继承的概念及实现1.继承的概念2.继承的用法2.继承的私有权限三、方法重写-Override1.什么是方法重写2.方法重写注意事项Java继承在我们的生活中,继承通常指子女继承父母的财产,在java中,也可以又相似的理解,一个或多个子类可以继承父类的方法和构造一、继承的概念及实现1.继承的概念继承背后的思想是:基于已存在的类构建新类当从已存在的类构建新类时,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类以应对需求从其他类导出的类叫子类。被导出的类叫父类
2021-06-04 15:17:39 97
原创 Listen第二个参数的值介绍
Socket编程中listen的第二个参数一、Listen函数的原型int listen(int sockfd, int backlog);第一个参数我们都知道是socket返回的描述符第二个参数表示什么呢,之前一直以为是connet的连接数量,但后面写小项目的时候发现并不是。二、Listen函数的第二个参数详解这张图是展示的三次握手的过程,这里我们要关注两个队列未完成三次握手的队列:每个这样的SYN分对应其中的一项,某个客户端发起了请求并到达服务端,而服务器正在等待处理对应的三次握手
2021-06-03 20:50:56 1117 1
原创 Java的类封装及关键字
一、封装的基本概念1.将东西打包在一起,然后以新的方式呈现出来(比如将方法和字段一起包装在一个单元中,这个单元以类的形式呈现出来)。2.信息隐藏,隐藏对象的实现细节,不让外部直接访问到。3.将数据和方法包装进类中,加上具体实现的隐藏(访问修饰符),共同被称作封装,其结果是一个同时带有特征和行为的数据类型。从以上我们可以得知:定义类,定义其属性,方法的过程称为封装类封装优点:良好的封装能够减少耦合。类内部的结构可以自由修改。可以对成员变量进行更精确的控制。隐藏信息,实现细节.
2021-06-03 17:00:29 3092
原创 字节序
一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码如下(示例):import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsimport warningswarnings.filterwarnings('ignore')import sslssl._create_default_
2021-05-24 19:10:33 129
原创 信号量
信号量:信号量是用来控制临界资源的,那什么是临界资源呢:在系统中有许多进程,他们共享各种资源,然而又很多资源一次只能供一个进程来使用,一次仅允许一个进程使用的资源称为临界资源,比如共享内存。共享内存并未提供同步机制,也就是说,在第一个进程结束对共享内存的写操作之前,并无自动机制可以阻止第二个进程开始对它进行读取,所以我们通常需要用其他的机制来同步对共享内存的访问,例如信号量。信号量集:就是多个信号量的集合P操作:类似于拿锁,通过P操作来获取访问临界资源的权限。运行P,信号量S的值将被减少。企图进
2021-05-23 16:02:22 115 1
原创 驱动代码框架
内核驱动编写当上层用户空间用户调用open打开一个设备时,会通过open的设备名来触发软中断(中断号0x80),系统调用(sys_call)来调用虚拟文件系统(VFS)的(sys_open)通过主设备号在内核驱动链表中找到驱动并运行驱动内的程序。下面是设备驱动的基本框架代码如下(示例):#include <linux/fs.h>#include <linux/module.h>#include <linux/init.h>#include <linux/
2021-05-19 21:03:44 176
原创 动态库与静态库
库的介绍及制作一、动态库和静态库的优缺点1:静态库:程序在执行前(编译时)就就加入刀目标程序中了优点:①.静态库被打包在应用程序中,加载速度快。②.发布程序时无需提供静态库,因为已经在APP中,移植比较方便。缺点:①.链接时完整的拷贝刀可执行文件中,被多次使用就会有多份冗余拷贝。(例如静态库占用1M内存,有2000个这样的程序,就占用近2G内存)②.更新,部署,发布麻烦静态库制作:①:gcc xxx.c -c 生成xxx.o文件②:ar rcs +要生成的静态库名字.a +xxx
2021-05-18 19:30:43 338
原创 TCP的三次握手和四次挥手
TCP的三次握手和四次挥手一:两种传输模式:1.TCP面向有连接,是可靠的,常用于点对点,适用与精确数据,比如在微信,QQ聊天2.UDP面向无连接,是高速的,常用于点对面,适用于需要传输大量数据并且相对来说不怎么关系数据精度,比如视频。二:三次握手简单理解为两人对话,需要确定A和B都不是聋子或哑巴。最快捷的说话方式需要3段对话:①A对B说:能听到吗②B对A说:能听到,你能听到吗③A对B说:我也能听到详细说明:1.序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数
2021-05-12 14:05:58 140
原创 函数指针和指针函数
函数指针和指针函数的区别一、函数指针本质上是一个指针,它指向的是一个函数的地址。1.如何定义一个函数指针:void(*p2)(int a,int b);函数指针是专用的。格式要求很强 返回值,参数类型,个数都必须相同。2.如何给函数指针赋值:void data(int a,int b){ }int main(){ void(*p2)(int a,int b);//声明一个函数指针 int a = 10,b = 20; p2=data;//初始化函数指针(给函数指针赋值)
2021-05-07 10:34:23 4245 1
原创 进程相关概念及使用
一、进程的概念1、进程和程序的区别1.程序是静态的概念,比如你写的一个存在磁盘中的文件,比如gcc - o pro ,这个生成的pro可执行文件就是程序。2。进程是动态的概念,比如gcc -o pro生成的这个pro文件,当他运行起来以后,系统中就会多一个进程。2、如何查看系统中有哪些进程1 ps指令:使用ps-aux指令可以查看所有进程,使用grep过滤得到想要知道的进程。比如(ps-aux|grep a.out),这里的|是指管道,作用是把ps得到的所有进程通过这个管道,通过grep筛选关
2021-05-06 20:17:23 223
原创 函数的命名规则
函数的命名规则命名介绍C程序中使用的变量名,函数名,库号等统称为标识符。在C语言中,除了库函数的函数名由系统定义外,其余都是用户自定义的。一、命名标准C语言中规定,标识符只能是由字母(A-Z和a-z)、数字(0-9)、下划线(_)组成的字符串,并且第一个字符必须是字母或者下划线。二、例程1.以下命名是合法的ax_3xBOOK_1sum52以下命名是非法的3s (以数字开头)s*T (出现非法字符)-3x (以减号开头)bowy-1 (出现非法字符
2021-04-24 12:37:19 6437 1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人