- 博客(204)
- 问答 (3)
- 收藏
- 关注
原创 Qt编译:libstdc++.so.6: version `GLIBCXX_3.4.32‘ not found
启动/data/Qtproject/build-TestAssist-moren-u8c03u8bd5/TestAssist ...
2025-11-03 14:24:28
187
原创 C/C++: void*的使用
void 在C/C++语言中通常表示“无类型”。因此,void* 可以理解为“指向一个无类型数据的指针”。void * 特殊之处在于它可以存储任何数据类型的地址。无论是 int、char、float、struct,它们的地址都可以赋给一个 void* 类型的指针变量。它不“知道”它指向的数据的类型和大小。正因为是“无类型”, void 本身没有具体的数据信息,void * 并不直接知道它所指向的数据的类型和大小。void * 被定义为 “指向任何类型数据的指针” 或 “通用指针”。
2025-10-31 15:40:27
833
原创 C/C++中的二级指针使用
二级指针就是:指向指针的指针,它存储的是“另一个指针变量的地址”。分配内存),那么必须用“指针的指针”。就是一个“指向字符串指针数组的指针”。pp 是二级指针,*pp 就是 p;p 是指针,*p 取出 a 的值;**pp 取出最终的值 a。2、修改指针本身(函数参数)3、C 语言字符串数组(1、动态分配二维数组。
2025-10-30 14:16:06
167
原创 VS2015开发C++项目时报错:Run-Time Check Failure #2 -Stack around the variable ‘myTimer‘ was corrupted
在设置第一项时,问题已解决,咨询GPT,GPT给出的解释是:代码本身并没有真正破坏栈,而是。在多线程 + 静态对象场景下,栈边界值可能被中间的 CRT/线程库访问或修改,项目属性 → C/C++ → 代码生成 → 基本运行时检查。项目属性 → C/C++ → 常规 → 调试信息格式。(VS 的“基本运行时检查 → 启用所有检查”),代码在逻辑上没错(线程退出、句柄关闭都正确),在退出阶段误报/触发了栈损坏检测。项目属性 → C/C++ → 优化。还在监视的栈空间上调用析构;
2025-10-29 16:22:22
259
原创 VSIDE调试记录
1、设置include目录(头文件路径)属性:配置属性->c/c++->常规在附加包含目录里添加:绝对路径D:\MyLib\include相对路径:$(ProjectDir)..\MyLib\include多个路径之间用分号;分隔。2、设置lib(库文件路径)配置属性->链接器->常规在附加库目录里添加lib所在的路径:绝对路径:D:\MyLib\lib相对路径:$(ProjectDir)..\MyLib\lib3、指定要链接的库文件:配置属性 → 链接器 → 输入。
2025-10-24 15:06:28
207
原创 Linux和Windows的C++程序移植问题
但 C++/Linux 使用 bool。unsigned long 或 uint32_t(来自 <cstdint>)pthread_t 或 std::thread 或 QThread*对线程安全性有要求时推荐用 std::atomic。Windows 的资源句柄,一般用于线程或文件,Windows 的调用约定,Linux 不需要。std::atomic<int> 或保持原样。Windows 定义,Linux 下不认识。指针类型,Linux 下就是 void*
2025-10-23 10:10:09
139
原创 C++:用CMake构建第一个项目
CMake允许开发者编写一种平台无关的 CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程。使用通配符 * 自动匹配当前目录下所有 .cpp 文件,并将其列表赋值给变量 SOURCES。对于大型或严格的项目,建议手动列出源文件。,因为如果新增源文件,CMake 不会自动重新生成构建系统,需要手动重新运行。变量中的所有源文件来编译它。
2025-09-14 11:50:35
338
原创 银河麒麟Kylin编译Qt5.12.12
-platform:指定宿主机的编译器(如 linux-clang)。#-skip <module>:跳过某些模块(如 -skip webengine)可以解决某些依赖问题或减少编译时间,但除非你确定不需要该模块,否则一般不推荐6。# -prefix <path>:指定Qt的安装目录(例如 /usr/local/Qt-5.12.12)。#-xplatform:如果进行交叉编译,需指定目标平台的编译器(例如针对ARM64架构的编译器)。#-qt-xcb:使用XCB(X11)进行图形界面渲染4。
2025-08-30 17:37:07
610
原创 银河麒麟KylinV10安装反射内存卡和图像注入卡
【代码】银河麒麟Kylin系统安装各种板卡(反射内存卡、图像注入卡、串口卡等)步骤及解决方案。
2025-08-30 17:34:17
331
原创 正则表达式
正则表达式(Regular Expreesion,简称regex)是一种用于匹配字符串模式的工具,常用于查找、验证、替换文本等任务。断手机号是否符合规则(例如中国大陆手机号):^1[3-9]\d{9}$匹配:hello.world_1@my-domain.com。1、查找邮箱地址:[a-zA-Z0-9_.+-]3、匹配日期:\d{4}-\d{2}-\d{2}一个空白字符(空格、Tab等)转义字符,例如:\.匹配”.”[3-9]第二个数字为3~9。\d{9}后面是9个数字。一个字符或数字或下划线。
2025-08-22 14:07:33
357
原创 Qt核心内容详解:事件循环+信号槽+对象树+属性+元对象与反射
常用的通信接口+类QTcpsocket,QTcpsever,Qserialport,Mgtt,sqlite。容器类QMAp,万能类型Qvarient,常用的QBytearry类。本篇将对Qt开发中五大核心模块做一个详细的分析。多线程Qthread+类。
2025-08-22 14:06:45
113
原创 C/C++开发中Debug和Release模式的区别
启用了优化后,程序的运行速度更快,效率更高。Debug 模式下在内存分配上有所区别,在我们申请内存时,Debug 模式会多申请一部分空间,分布在内存块的前后,用于存放调试信息。数据溢出问题,在一个函数中,存在某些从未被使用的变量,且函数内存在数据溢出问题,在 Debug 模式下可能不会产生问题,因为不会对该变量进行优化,它在栈空间中还是占有几个字节,但是 Release 模式下可能会出问题,Release 模式下可能会优化掉此变量,栈空间相应变小,数据溢出就会导致栈内存损坏,有可能会产生奇奇怪怪的错误。
2025-08-17 10:23:31
615
原创 C/C++中的内存分区
如果在堆上分配了空间,就有责任回收它,否则运行的程序会出现内存泄漏,另外频繁地分配和释放不同大小的堆空间将会产生堆内碎块。在执行函数时,函数内局部变量的存储单元都在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。未初始化数据区(BSS Segment):存储未初始化的全局变量和静态变量,这些变量在程序开始执行前被自动初始化为零。一个C、C++程序编译时内存分为 5 大存储区:堆区、栈区、全局区、文字常量区、程序代码区。
2025-08-16 10:17:23
305
原创 C++中的static关键字
(5)在C++中,static关键字可以用于定义类中的静态成员函数:与静态成员变量类似,类里面同样可以定义静态成员函数。1、修饰静态局部变量,会改变局部变量的存储位置,从而使得局部变量的生命周期变长,延长至程序结束才销毁,普通的局部变量创建后是放在栈区,这种局部变量进入作用域时创建,出了作用域就销毁。在C语言中static用来修饰局部静态变量和外部静态变量和函数,而C++语言还可以用来定义类的成员变量和函数,即静态成员和静态成员函数,C++的静态成员可以在多个对象实例之间进行通信,传递信息。
2025-08-16 10:16:22
404
原创 Reactor模式
Reactor一种事件处理模式,主要用于高性能网络编程中处理并发I/O操作。Reactor(反应器)模式是一种的事件处理模式,核心思想是。当遇到下面这些情况时可以使用Reactor模式:需要跨平台支持熟悉同步编程模型连接数多但每个连接负载不高运行在Linux/Unix上。
2025-08-04 20:26:33
319
原创 VTK(Visualization Toolkit)开发学习
可视化工具包(VTK)是用于操作和显示科学数据的开源软件。它配备了最先进的3D渲染工具,一套用于3D交互的小部件,以及广泛的2D绘图功能。vtkConeSource 生成几何数据并提供给。vtkConeSource 一个数据源类,用于生成圆锥形的几何体模型。它是VTK提供的一种简单的几何体生成器之一,用于在可视化和计算流程中创建基本的圆锥形状。数据源 你也可以换成别的,比如球,立方体,或者自定义的几何体。vtkPolyDataMapper 将几何数据转换为可供vtkActor显示的格式。
2025-07-08 11:10:58
514
原创 Linux系统下如果忘记root用户密码处理方法
(如系统为 Ubuntu 这类默认禁用 root 的系统,可能需要先启用 root 帐号,可以执行。,在启动时看到GRUB菜单(可能需要按住或快速按shift键或Esc键)进入菜单。你现在会进入一个没有图形界面的 bash shell,root 用户已登录。表示系统启动后运行 bash 而不是默认的 systemd/init。选中平时启动的内核那一行(通常是第一行),通过GRUB引导菜单重置root密码。表示挂载根文件系统为可读写。找到以linux或linux。按下e进入编辑模式。修改 root 密码。
2025-07-04 17:23:34
243
原创 Http请求
幂等性:GET请求是幂等的,多次发送相同的GET请求不会对服务器产生任何副作用;POST请求不是幂等的,多次发送相同的POST请求可能会导致服务器状态改变。安全性:GET请求将参数暴露在URL中,因此不适合传输敏感数据,POST请求将参数放在请求正文在,相对更安全。数据体积:GET请求的数据大小受URL长度限制,通常用于获取少量数据,而POST请求可以发送大量数据。参数传递:GET请求将参数以查询字符串的形式附加到URL上,而POST请求将参数放在请求正文中。
2025-07-04 10:33:27
117
原创 C++:Lambda表达式
Lambda 表达式是 C++11 中引入的一种轻量级函数对象(匿名函数),它提供了一种简洁的方式来定义内联函数,可以像函数指针或函数对象一样使用,适合回调、算法、并发等场景。现代 C++ 编程中,尤其是 C++11 及以后的版本中,lambda 表达式和std:bind都可以用来表示函数对象,都可以用于将函数与特定参数绑定,或者生成可调用对象。是 C++11 中引入的一个函数模版,它允许我们将函数与部分参数绑定,生成一个新的可调用对象。将函数或成员函数与特定的参数组合,类似于固定函数的参数。
2025-07-03 17:40:20
485
原创 C语言中的字符串问题
在大概2000年的时候有一股热潮,将各个字符串函数替换成带最大长度限制的版本,例如strncpy (所以在阅读开源 C语言项目的时候经常会看到某个有点眼熟但是又不认识的函数,这时候一般就是这种情况)实际的开源项目中其实都有自己的字符串"类",即使是没有类语法支持的纯C项目中也是会有的,只是用C的语法罢了,实现思想就是字符串的类。这主要是早期的std::string 有很多问题,例如vc6中的版本复制出来的字符串占用的内存是同一块,只有当修改了其中一个的内容时它才会新生成一块内存,这在多线程环境下就是灾难。
2025-06-16 21:51:46
255
原创 C/C++项目的第一行代码
开源C项目最难的是编译,以上的措施其实只是一个预防,在引用各种头文件很混乱的时候还是会发现有重复定义的函数或者是其他元素导致编译失败的情况,这时候就要具体内容具体分析了,一般的做法是先想办法尽量减少引用的头文件,一般来说这时候是编译错误灾难的开始,是各种编译器错误提示爆发的开端。这是利用了C/C++的宏定义特性来防止代码文件被重复复制进最后的编译源码中,是一个预防措施,本质上并不是必须的,因为C语言的include会将对应的文件内容整个包含到最后的编译源码中,与其他所有的现代语言都不同。
2025-06-16 21:21:55
256
原创 OpenGL屏幕和渲染解析
视觉暂留:人眼在观察景物时,光信号传入大脑神经,需经过一段短暂的时间,光的作用结束后,视觉形象并不立即消失,这种残留的视觉称“后像”,视觉的这一现象则被称为“视觉暂留”。以前总觉得图形的变换总是在第一帧的基础上进行是费时费力的,如果在上一帧的基础上变换岂不是更省事,理解了屏幕成像和渲染原理之后对这个问题,或者说对图形学才有了初步的理解。撕裂是由于CPU或GPU耗时过⻓而产生的,iOS解决的方式是引入垂直同步Vsync + 双缓冲的机制,而解决撕裂是以掉帧作为代价的,掉帧不能完全被解决。
2025-06-10 21:50:35
1028
原创 交叉编译教程
不过幸运的是,主流开发板厂商(如友善之臂)通常会提供预编译好的工具链,只需按照官方手册配置,即可大幅降低入门门槛。32位编译器建议在32位系统中使用,虽可通过安装依赖在64位系统运行,但可能引发兼容性问题。,例如在x86架构的Linux主机上编译适用于ARM架构开发板的程序。官方文档永远是第一手资料,其次可参考优快云等技术社区(如Qt编译参数详解)。使用CMake配置Qt6源码,指定交叉编译器路径,生成构建文件后运行。64位编译器仅支持64位系统,需确保主机与工具链位数匹配。
2025-06-10 21:49:00
1056
原创 Qt如何打包程序为exe文件
Qt单独提取用的是Qt 5.12.9 (MinGW 7.3.0 64-bit)命令行输入: windeployqt.exe 文件名.exe。
2025-05-17 17:58:37
185
原创 C++多线程:mutex
std::mutex 是 C++ 标准库中一种常用的同步工具,能够确保同一时刻只有一个线程能访问某个资源,从而避免数据竞争,保证线程安全。它提供独占的非递归所有权语义。线程在访问共享资源之前必须先获取 mutex 锁,完成后再释放锁。释放锁之前,如果其他线程尝试获取 mutex 锁,它们会被阻塞。在这里,如果多个线程同时对一个对象进行操作,如果至少有一个写操作,那么必须保持其独占性。主要功能:1. try_lock_for:尝试在指定的时间内获取锁。如果在超时之前获取锁成功,返回true,否则返回。
2025-05-04 19:24:57
996
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1