- 博客(80)
- 收藏
- 关注
原创 docker容器内使用 gdb detach 到某进程中debug报错
Could not attach to process. If your uid matches the uid of the target process, check the setting of /proc/sys/kernel/yama/ptrace_scope, or try again as the root user. For more details, see /etc/sysctl.d/10-ptrace.confptrace: Operation not permitted.
2024-05-27 20:54:06
298
原创 启动 UE4编辑器报 加载 Plugin 失败
在 UE4 安装目录/Engin/Plugins 中找到该插件的目录,修改 SteamVR.uplugin 文件,将下述红框中的 true 改为 false,然后再编译一次UE4。
2024-04-20 22:37:39
1424
原创 UE4打开 project 报错:The following modules are missing or built with a different engine version
这个过程大概需要 40 ~ 60 分钟,重新构建完毕且无报错后,就可重新用UE4 打开项目了。这导致我完全打不开之前的项目,导致在这项目上的工作完全白做了。用 Rider 打开报错的 project,然后选中项目右键,
2024-03-03 10:48:07
2259
原创 Ubuntu20.04: UE4.27 中 Source Code 的编辑器下拉框没有 Rider选项
最近想用 Rider 作为 UE4 开发的 IDE,但安装好 Rider 后,发现编辑器下拉框中没有 Rider 的选项,我检查了 UE4 的插件,发现 Rider Integration 插件已经安装且启用的。插件的源码,发现在UE4中加载IDE Rider都是需要找到 Rider 的安装目录,进而在安装目录内找到。所以我发现可能是我的 Rider 安装目录的命名不符合搜索的规则,所以才没有 Rider选项。
2024-03-03 10:36:04
1505
2
原创 cmake 时 ros2有关库报错:module ‘em‘ has no attribute ‘BUFFERED_OPT‘
cmake 时 ros2有关库报错:module 'em' has no attribute 'BUFFERED_OPT'
2023-12-20 09:58:36
2958
3
原创 win11装了Ubuntu系统,切换到 wim11,蓝牙耳机显示已连接,但耳机无声音,且声音外放正常
发现蓝牙耳机已经被识别音频,也可能没有被识别为音频设备,而是显示其他设备,这样会导致输出设备上没有耳机这一选项,则点击。这时输出设备中就有耳机选项了,蓝牙能正常播放声音了。,发现耳机是连接正常的,点击页面的。右键蓝牙耳机,点击属性,将除了。的选项都勾选上,然后应用、确定。去设置蓝牙耳机的服务。
2023-12-16 11:14:49
865
1
原创 ! [remote rejected] develop -> develop (pre-receive hook declined)
分支是受保护的,不允许把代码上传到该分支。
2023-08-07 14:32:49
1244
原创 (Ubuntu 20.04)fatal error: dwarf.h: 没有那个文件或目录
【代码】(Ubuntu 20.04)fatal error: dwarf.h: 没有那个文件或目录。
2023-07-20 17:09:26
555
原创 Nginx 的配置文件中的 keepalive 介绍
Nginx 的配置文件中 http 模块有关于 keepalive 的一些字段,这里的 keepalive 表示的是 HTTP1.1 的长连接。HTTP/1.0 性能上的一个很大的问题,那就是每发起一个请求,都要新建一次 TCP 连接(三次握手),而且是串行请求,做了无谓的 TCP 连接建立和断开,增加了通信开销。为了解决上述 TCP 连接问题,HTTP/1.1 提出了长连接的通信方式,也叫持久连接。这种方式的好处在于减少了 TCP 连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。持久连接的特点
2022-06-09 22:40:02
8783
原创 在 CentorOS 7 中安装 Nginx
安装前准备操作系统:CentorOS 7Nginx 安装包:nginx-1.21.6.tar.gz (可在此处下载)安装流程1、安装包在官网中下载安装包,并将安装包上传到虚拟机上通过 tar zxvf nginx-1.21.6.tar.gz 命令解压缩安装包2、安装安装包解压缩完成之后,进入安装包目录,该目录下的文件如下图将 Nginx 安装到 /usr/local 目录中./configure --prefix=/usr/local如果中途出错,那是因为当前系统缺少一些依赖,
2022-05-27 21:27:00
222
原创 ARCore之路:解决 ARCore Install Preview 即时预览APP 中弹出 The device does not support AR
解决 ARCore Install Preview 即时预览APP 中弹出 The device does not support AR
2022-05-13 15:47:34
2399
原创 ARCore 之路:如何创建一个 ARCore 程序?
1.1、创建一个 3D 项目1.2、安装特定版本的软件包选择Window > Package Manager并安装以下软件包:Multiplayer HLAPIXR Plugin Management1.3、导入 ARCore SDK for Unity v1.25.0该 unitypackage 可在以下链接下载:https://github.com/google-ar/arcore-unity-sdk/releases下载完毕之后,将 ARCore SDK for Uni
2022-05-04 20:31:00
1914
原创 ARCore之路:AugmentedImage 项目例子分析
项目效果该项目是增强图像的例子,相机捕捉到数据库中的图像之后,将手机中显示的白色方框(下图左侧)对准图像,将会生成一个相框(下图右侧),该相框会根据图像的大小和位置,将图像包围住。该相框会随着图像的移动而移动,紧紧跟随图像。ARCore 最多可以同时跟踪 20 张图像,但 ARCore 不会同时检测或跟踪同一图像的多个实例,即相机捕捉到两张相同的图像,只会跟踪其中的一个。下图是项目的节点,下面将分析各个节点的作用。1、ARCore Device该节点的详情可到此处了解:传送门它需要ARCo
2022-04-27 08:57:02
2445
原创 ARCore之路:HelloAR项目例子分析
项目效果通过相机扫描环境中的平面,它会生成上图中的白色网格UpdateApplicationLifecycle() 函数讲解
2022-04-26 17:03:49
704
原创 ARCore之路:预制体 ARCore Device 介绍
1、ARCore Device下图是 ARCore Device 预制体的组成,它还有一个子物体 First Person Camera ,它是一个第一人称相机。ARCore Device 内含 ARCoreSession 脚本组件,它是一个 ARCore 会话。1.1 ARCoreSessionARCoreSession 脚本组件中有三个属性,分别是:Device Camera Dire:主要是用来设置手机设备使用前置摄像头还是后置摄像头Back Fcing:使用前置摄像头Front
2022-04-25 21:55:28
1490
原创 ARCore之路:ARCore 中的 Session Config 配置中的参数介绍
ARCore 中的 Session Config 配置参数介绍
2022-04-25 21:30:31
2101
原创 C++11新特性:基于范围的 for 循环
1、概念// 普通的for循环for(表达式 1; 表达式 2; 表达式 3){ // 循环体}// 基于范围的for循环for (declaration : expression){ // 循环体}1.1、普通的for循环它的工作流程是:1、执行表达式 12、如果表达式 2 为 true,则执行循环体,否则跳出循环3、执行表达式3,会到第二步,重复执行。这种方式需要给出容器的两端,即开头和结尾。1.2 基于范围的for循环它的工作流程:1、将 expr
2022-04-14 17:21:48
1291
1
原创 C++11新特性:自动类型推导
1、auto 关键字1.1、概念// 语法 auto 变量a = 变量b;int b = 10;double c = 3.14;auto a = b; // a 是 int 类型auto d = c; // d 是 double 类型使用 auto 关键字修饰的变量 a可根据给它赋值的变量b的类型推导出变量a的类型,即变量b 是什么类型,那么变量a 就是什么类型。C++11 中 auto 并不代表一种实际的数据类型,只是一个类型声明的 “占位符”,auto 并不是万能的在任意场景下都能够推
2022-04-14 16:48:45
444
原创 网站压测工具 Webbench 源码分析
介绍Webbench是一个在Linux下使用的非常简单的网站压测工具。它的源代码只有500多行,挺值得一看的开源项目。实现原理只是简单的fork()出多个子进程模拟客户端去访问设定的URL,测试网站在压力下工作的性能,然后把结果写到管道,让父进程读取并打印到屏幕。工作流程图源码分析执行结果一些打印信息根据下面的执行结果进行对比[luxizheng@VM-12-17-centos WebBench-master]$ ./webbench -f -t 10 -c 10 -2 http://ww
2022-04-01 13:06:05
821
原创 类中不定义构造函数,C++编译器会生成默认的构造函数?
初学者在学习C++的时候都知道:如果在类中不定义构造函数的话,编译器会自动生成一些函数:构造函数拷贝构造函数析构函数赋值运算符请注意:这种说法是错误的!!!!正确的说法应该是:当上述这些构造函数真的被用到的时候,编译器才会自动生成相应的构造函数。那什么情况才会被用到呢?含有类对象数据成员,该类对象类型有默认构造函数基类带有默认构造函数的派生类带有虚函数的类带有虚基类的类为什么这些情况会用到,可以去这篇博文了解下面我们来验证一下(图片中左侧是我们平时写的代码,右侧是编译后编译
2022-03-26 21:45:15
3453
原创 《Effective C++》学习笔记(条款53:不要轻忽编译器的警告)
最近开始看《Effective C++》,为了方便以后回顾,特意做了笔记。若本人对书中的知识点理解有误的话,望请指正!!!许多程序员习惯性的忽略编译器的警告。他们认为,如果问题很严重,那么编译器应该给一个错误而不是警告。这种想法在C++是不可取的,以一个例子来说明:class B{public: virtual void f() const;};class D: public B{public: virtual void f();};这里希望 D::f()重新定义 虚函数
2021-11-27 16:29:11
341
原创 《Effective C++》学习笔记(条款51:编写 new 和 delete 时需固守常规)
最近开始看《Effective C++》,为了方便以后回顾,特意做了笔记。若本人对书中的知识点理解有误的话,望请指正!!!条款50 讨论了什么时候需要自定义 operator new 和 operator delete,现在本条款来讨论在自定义时需要遵守的规则。从operator new开始:实现一致性 operator new 必须返回正确的值内存不足时必须调用 new-handling 函数(见条款49)必须有对付零内存需求的准备避免不慎掩盖正常形式的 new这比较偏近 class
2021-11-24 22:37:08
860
原创 《Effective C++》学习笔记(条款52:写了placement new 也要写 placement delete)
最近开始看《Effective C++》,为了方便以后回顾,特意做了笔记。若本人对书中的知识点理解有误的话,望请指正!!!placement new 和 placement delete 在C++中并不常见,如果你不熟悉它们,也不用担心。当你写一个 new 表达式时:Widget* pw = new Widget;共有两个函数被调用:一个是以分配内存的 operator new,一个是 Widget 的默认构造函数。假如第一个函数调用成功,但第二个函数却抛出异常,这时需要释放第一步分配得到的内存,
2021-11-24 22:35:54
938
原创 《Effective C++》学习笔记(条款49:了解new-handler的行为)
最近开始看《Effective C++》,为了方便以后回顾,特意做了笔记。若本人对书中的知识点理解有误的话,望请指正!!!当 operator new 无法满足某一内存分配时,就会抛出异常。以前它会返回NULL指针,某些旧式编译器目前也还这么做。在operator new抛出异常以前,会先调用一个客户指定的错误处理函数:new-handler。(这其实并非全部事实,operator new 真正做的事更复杂,见条款51)。为了指定这个“用以处理内存不足”的函数,客户必须调用 set_new_handle
2021-11-23 22:44:38
667
原创 《Effective C++》学习笔记(条款50:了解new和delete的合理替换时机)
最近开始看《Effective C++》,为了方便以后回顾,特意做了笔记。若本人对书中的知识点理解有误的话,望请指正!!!有人会想要替换掉编译器提供的 operator new 或 operator delete,有三个理由:用来检测运用上的错误。如果将“new 所得内存” delete 掉却失败,会导致内存泄漏。如果在“new 所得内存”身上多次 delete 会导致不确定行为。使用编译器提供的operator new和operator delete不能检测上述行为。如果 operator new
2021-11-23 22:42:40
432
原创 《Effective C++》学习笔记(条款46:需要类型转换时请为模板定义非成员函数)
最近开始看《Effective C++》,为了方便以后回顾,特意做了笔记。若本人对书中的知识点理解有误的话,望请指正!!!条款24提到过为什么 非成员函数 才有能力“在所有实参身上实施隐式类型转换”,本条款接着那个Rational例子来讲,把 Rational和 operator*模板化:template<typename T>class Rational {public: Rational(const T& numerator = 0,const T& deno
2021-11-22 23:00:17
448
原创 《Effective C++》学习笔记(条款47:请使用traits class表现类型信息)
最近开始看《Effective C++》,为了方便以后回顾,特意做了笔记。若本人对书中的知识点理解有误的话,望请指正!!!STL主要由“用以表现容器、迭代器和算法”的 模板 构成,也包括若干工具性质的 模板 ,其中有一个 advance 用来将迭代器移动某个给定距离:template<typename IterT, typename DistT>void advance(IterT& iter, DistT d); //d大于零,迭代器向前移动d单位,小于零则向后移动一般来
2021-11-22 22:58:47
395
原创 《Effective C++》学习笔记(条款48:认识 template 元编程)
最近开始看《Effective C++》,为了方便以后回顾,特意做了笔记。若本人对书中的知识点理解有误的话,望请指正!!!模板元编程(template metaprogramming,TMP)是编写 template-base C++ 程序并执行于编译期的过程。即用C++写的模板程序,编译器编译具现化的过程。一旦TMP程序结束执行,从 templates 具体化出来C++源码,也会一如往常地被编译。TMP的好处:第一,它让某些事情更容易;第二,由于 模板元编程 执行于C++编译期,因此可将工作从运行期转
2021-11-22 22:57:26
641
原创 《Effective C++》学习笔记(条款43:学习处理模板化基类内的名称)
最近开始看《Effective C++》,为了方便以后回顾,特意做了笔记。若本人对书中的知识点理解有误的话,望请指正!!!假设我们有一个程序,它能够传送信息到若干不同的公司去。信息要么被加密,要么就是未加密。如果在编译期间我们拥有足够的信息来决定哪一个信息传至哪家公司,就可以采用基于 template 的方法:class CompanyA {public: ... void sendCleartext(const std::string& msg); void send
2021-11-21 22:35:07
690
原创 《Effective C++》学习笔记(条款44:将与参数无关的代码抽离 templates)
最近开始看《Effective C++》,为了方便以后回顾,特意做了笔记。若本人对书中的知识点理解有误的话,望请指正!!!模板是节省时间和避免代码重复的好方法:类模板:只需要实现一个类模板,编译器会具现化类模板里的 成员函数(类模板里的 成员函数只有在被使用时才暗中具现化,所以只有类模板里的 成员函数都被使用,你才能获得类模板里的全部 成员函数)函数模板:只需要一个函数模板,编译器就能实现许多不同 template参数 的函数但使用 模板 会导致代码膨胀:其二进制码带着重复的代码、数据、或两者都
2021-11-21 22:29:53
518
原创 《Effective C++》学习笔记(条款45:运用成员函数模板接受所有兼容类型)
最近开始看《Effective C++》,为了方便以后回顾,特意做了笔记。若本人对书中的知识点理解有误的话,望请指正!!!智能指针是”行为像指针“的对象,并提供指针没有的机能。真实指针做得很好得一件事是:支持隐式转换。如派生类指针隐式转换为基类指针,”指向 非常量对象“的指针可以转换为”指向 常量对象“的指针等到。如:class Top { ... };class Middle: public Top { ... };class Bottom: public Middle { ... };
2021-11-21 22:28:18
398
原创 《Effective C++》学习笔记(条款41:了解隐式接口和编译期多态)
最近开始看《Effective C++》,为了方便以后回顾,特意做了笔记。若本人对书中的知识点理解有误的话,望请指正!!!1 显式接口 和 运行期多态面向对象编程的世界总是以显示接口和运行期多态解决问题。举个例子,class Widget { //给个无意义的类public: Widget(); virtual ~Widget(); virtual std::size_t size() const; virtual void normalize();
2021-11-20 22:45:44
466
原创 《Effective C++》学习笔记(条款42:了解 typename 的双重定义)
最近开始看《Effective C++》,为了方便以后回顾,特意做了笔记。若本人对书中的知识点理解有误的话,望请指正!!!声明 template 类型参数,class 和 typename 的意义完全相同,如:template<class T> class Widget; //使用 classtemplate<typename T> class Widget; //使用typename然而,C++并不总是把 class 和 typename 视为等价。有时候你一定得使用
2021-11-20 22:44:05
457
1
原创 《Effective C++》学习笔记(条款36:绝不重新定义继承而来的non-virtual函数)
最近开始看《Effective C++》,为了方便以后回顾,特意做了笔记。若本人对书中的知识点理解有误的话,望请指正!!!如果在基类中有一个 public 函数 mf,创建一个派生类对象 x ,然后创建一个基类指针指向 x 调用这个函数,创建一个派生类指针指向 x 调用这个函数,两者调用的函数相同,那么结果应该是一样的吗?一般来说会是一样的,但如果 mf 是个普通函数且派生类重新定义 mf 函数,将会遮掩基类的相应函数,通过派生类调用该函数,永远是派生类的版本,而非基类的版本。class B {pu
2021-11-14 21:50:15
269
原创 《Effective C++》学习笔记(条款37:绝不重新定义继承而来的默认参数值)
最近开始看《Effective C++》,为了方便以后回顾,特意做了笔记。若本人对书中的知识点理解有误的话,望请指正!!!我们可以将本条款的讨论局限于“继承一个带有默认参数的 虚函数”,而本条款成立的理由非常简单:虚函数 是动态绑定(又名后期绑定),而默认参数值却是静态绑定(又名前期绑定)。对象的所谓静态类型,就是它在程序中被声明使所采用的类型。看下面的 class 继承体系:class Shape {//用于描述几何形状的类public: enum ShapeColor { Red, G
2021-11-14 21:48:21
670
原创 《Effective C++》学习笔记(条款38:通过组合构造出has-a 或 “根据某物实现出”)
最近开始看《Effective C++》,为了方便以后回顾,特意做了笔记。若本人对书中的知识点理解有误的话,望请指正!!!组合(composition)是类型之间的一种关系,当某种类型的对象内含其它类型的对象,便是这种关系。如:class Address { ... };class PhoneNumber { ... };class Person { //Person对象由string、Address、PhoneNumber构成public: ...private: std::s
2021-11-14 21:47:01
435
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人