install_and_uninstall
make install, make程序会按照命令执行安装
通过make安装软件分为如下几个部分:
下载源码,github之类的
配置,通常下载的源码(tar.gz)有些配置文件,比如 configure, cmakelists.txt等,可以传递参数来自定义安装路径和编译选项,配置好之后,运行./configure, cmake -B xxx -S xxx .来生成makefile文件
编译,执行make命令后,会读取makefile文件,根据其中的规则执行编译任务,比如可以调用gcc将源代码编译成可执行二进制文件。
安装,执行make install命令,编译好的二进制文件被复制到系统的指定位置(这个位置写在makefile中的),通是/usr/local/bin、/usr/local/lib
卸载,执行make uninstall命令,按照预定义的规则将安装的文件删除。
通过make安装的软件,
不会自动检测依赖,必须保证所有的依赖库已经正确安装
升级复杂,无法处理残留文件和依赖关系
文件分散,难以追踪 ...
effective_cplusplus
条款29
函数要达到异常安全,需要满足两个条件:
不泄露资源
不允许数据败坏(至少需要数据是有效的)
异常安全函数通常可以达到如下几个等级
基本承诺,异常被抛出,程序的任何事物仍然是有效地(比如计数器失效,有序数组失序),但当前程序的现实状态不确定,可能是几种状态之一。
强烈保证,只有未执行和执行两种状态,失败则会返回到未执行状态。
不抛掷保证,承诺不抛出异常,内置类型的所有操作都提供不抛掷保证,所以无法捕获到这些异常,如:
12345678910111213 try{ int a = 0; int b = 5; int c = b / a; } catch(exception e){ cout << "ztj: " << e.what(); } return 0;}没有捕获到异常:(yolo) tangjie.zhang@moveai415:effective_cpp$ ./bFloatin ...
more_effective_cpulsplus
指针与引用在这样情况下,使用指针:
可能存在不指向任何对象的可能
需要在不同时刻指向不同的对象。
在这样情况下,使用引用:
上述的其他情况
重载操作符时,返回值用引用
c++风格类型转换static_cast ,很多类型转换的工作
const_cast, 去掉const 或 volatileness 属性
dynamic_cast, 安全的沿着类的继承关系向下进行类型转换
reinterpret_cast, 指针之间转换(通常不可移植)
多态与数组不应该一起使用如果创建了派生类数组,将其传给基类数组形参,虽然不会报错,但内存分布有很大的问题,派生类一般大于基类,而基类数组间隔小于派生类数组间隔,会导致错误。有很大的潜在问题:
12345678910111213141516171819202122#include <iostream>using namespace std;class Base{ public: int a = 6;};class Der: public Base{ public: int ...
cplusplusprimer
输入运算符必须处理输入可能失败的情况,而输出运算符不需要。
至于为什么,个人看法,操作系统分层,从硬件到系统到应用程序,数据是一步步传输的,哪里产生的错误由哪里处理,输出时,程序可以保证数据的类型和格式一致(如果和预期不一致,那是你写错了),而之后的错误进入到了操作系统层,不应该由用户处理。至于输入,操作系统应该能保证输入没问题,到软件层,再进行错误检测。
面对对象程序设计(oop)三个基本概念:数据抽象、继承、动态绑定。
数据抽象:将类的接口与实现分离
继承:定义相似的类型,并对其相似关系建模
动态绑定:一定程度上忽略相似类型的区别,用统一的方式使用对象。
前向声明类(仅声明的类)可以应用的场景:
指针和引用
作为函数参数或返回类型
用在模板参数中,如:class A; vector<A> vec;
作为静态成员变量的类型,(像那种不允许实例化的类,一般都会存一个自己)
PyTorch_h
Tensor & autogradTensor支持gpu加速,可以在ipython/notebook使用<function>? 查看帮助文档,也可以在代码中用help(function)这里的function就不用加小括号了,如
12torch.ones? #仅用于notebook/ipython#help(torch.ones)
基础操作从接口,对tensor操作分为两类(torch.sum(a, b), a.sum(b)):
torch.function, 如torch.save (torch 是导入的模块名)
tensor.function, 如tensor.view (tensor代表的是创建的tensor对象名,)
从存储,对tensor操作分为两类:
不会修改自身数据,如a.add(b),会返回一个新的tensor
会修改自身数据,如a.add_(b)
创建tensor方式:
Tensor函数是最复杂多变的方式,可以接收list,可以指定形状,可以传入其他的tensor,或者torch.Size类别。
1234a = t.Ten ...
经验记录
linux相关
kill多个进程ps -ef | grep -v grep | grep tcp | cut -c 9-15 | xargs kill
ps -ef 列出所有进程,grep -v grep 去除和grep相关进程,grep xxx查找带有xxx字符串的进程,cut -c 11-15取出每行11-15,刚好是进程id,xargs kill,使用之前的内容为参数,由kill来执行。
映射端口到本地(jupyter)
服务器上使用jupyter notebook后,将可以在服务器上通过localhost:port访问代码。但是本地上确访问不了服务器的代码。通过端口映射将服务器端口映射到本地参考文章:
1ssh -p 3090 -NfL 10086:202.115.17.239:10086 ming.xing@202.115.17.239
-p 指定端口,是指访问服务器的端口,平时访问服务器时也必须使用ip+port(202.115.17.239:3090)访问,此处也必须指明端口。否则都找不到服务器。(与后处的10086端口有区别,后面的10086指服务器系统里 ...
bug记录
1
stm32f103
错误现象:不使用 freertos 时,可以完成外设初始化,可以完成点灯,串口发送数据。使用 freertos 时,即使把外设初始化函数放到 main 函数最前面,然后立刻点灯,串口发数据,都看不到效果。使用 freertos 时,但删除掉 xTaskCreate 函数(包含heap初始化代码)后,可以点灯,收到数据。
错误原因:在使用 freertos 操作系统时,如果开启了动态创建任务,需要加入内存管理文件(我的是 heap_4.c ),需要定义一个数组供其使用
123456 static uint8_t ucHeap[ configTOTAL_HEAP_SIZE ];/*config.h*///系统所有总的堆大小#define configTOTAL_HEAP_SIZE ((size_t)(5*1024)) //stm32f103x8 似乎最大只有 20k //这里被设置成了5k,需要注意的是,虽然sram容量大于10k,但如果设为10k没法运行 //sram大小好像是20k
需要注意的是,对应不同芯片,配置的值 ...
vmware_wsl网络配置
需求:
因为学习需要,需要在vmware下coding,不免就需要查资料等,需要访问外网,但不想在虚拟机上再安装一个clash,想直接利用windows下clash的allow lan功能来共享网络。
虚拟机上ip最好是静态的,便于与开发板进行通信。
由于很多内容在windows下完成更便捷,也需要完成wsl访问外网的配置。
VMware三种网络模式分为桥接,NAT模式,Host-Only模式三种模式,(很多内容参考这篇文章:VMware的三种网络模式,),一般vmware会虚拟出 vmnet0,vmnet1,vmnet8三个虚拟交换机,后两个会生成两个虚拟网卡,这两个虚拟网卡通常可以在windows下 更改适配器选项 中看到。(个人:主机有多少不同的网卡,就可以与多少不同的局域网进行通信,不管是物理网卡还是虚拟网卡)
桥接模式原理:桥接模式是最简单的一种,桥接模式就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信。主机网卡也起到了交换机的作用,主机网卡,虚拟交换机下的那四个交换机都处于同一个网域内,掩码,网关应该一致,各机器之间也可以相互ping通。
配置:在v ...
计算机专业术语对照
z
这个网页查全称很强,注意选择范围 it:What does VSMA stand for? (abbreviations.com)
但是还是要具体语境具体分析,最好从上下文判断。
计算机专业术语对照A
abstraction layer,抽象层
access,获取,存取
acoustic coupler,声音耦合器
Active Directory,活动目录
Acyclic Dependencies Principle,非循环依赖原则(ADP)
acyclic digraph,有向无环图
Adaptive Code,自适应代码
Add Parameter,添加参数
ADSL,Asymmetrical Dingital Subscriber Loop,非对称数字用户环线
affinity,绑定
affinity group,地缘组
agent,代理
agent-based interface,代理人界面
Aggregate,聚合
Aggregate Root,聚合根
Agile,敏捷方法论
agile practice,敏捷实践
agile process,敏捷流程
agility, ...
imx6ull使用
.
相关bug可以查看 《bug记录/imx6ull》
从 USB 下载程序按照正点原子步骤编译链接,更改为二进制文件,
1234led.bin : 1_leds.s arm-linux-gnueabihf-gcc -g -c 1_leds.s -o led.o arm-linux-gnueabihf-ld -Ttext 0x87800000 led.o -o led.elf arm-linux-gnueabihf-objcopy -O binary -S -g led.elf led.bin
要想在imx上运行,还需要在 bin 文件前加上一个头部,用于初始化 ddr,这个正点原子已经给出 imxdownload。(它程序中配置的是将imx文件拷贝到 SD 卡,需要将这些文件注释掉,保留创建 imx 的文件).
12gcc -o imxdownload imxdownload.csudo ./imxdownload led.bin /dev/sdd
最后获取 nxp 提供的 uuu 工具(不是用aptget安装的),
1sudo snap install univer ...