HTTPS

HTTPS 配置 配置HTTPS 安装 Certbot: sudo apt update sudo apt install -y snapd sudo snap install core sudo snap refresh core sudo snap install --classic certbot sudo ln -s /snap/bin/certbot /usr/local/bin/certbot 申请证书并自动配置 Nginx: sudo certbot --nginx -d note.plhwiki.cn 旧域名 plhwiki.cn、www.plhwiki.cn 的证书仍然保留,用于把 HTTPS 访问 301 跳转到 note.plhwiki.cn。

October 20, 2026 · 1 min

CMake

CMake 学习笔记 目录 快速入门 CMake 工作原理 安装指定版本 CMake(源码编译) out-of-source 构建规范 第一个 CMakeLists.txt 变量与流程控制 变量使用 路径相关变量 CMake 自带变量 if 流程控制 cache 缓存变量 include 用法 括号注释 属性 构建配置与日志 编译类型与 C++ 标准 追加编译选项 收集源文件 输出路径设置 生成 compile_commands.json 分步编译与清理指定 target 调试:打印生成的具体指令 message 用法 Target 与依赖管理 add_library(创建库目标) 导入外部库:IMPORTED target_include_directories target_link_libraries(依赖传播) 链接预编译的第三方库(.a / .so) set_target_properties find_package 与导入目标 生成器表达式基础 install 交叉编译与 Toolchain CMake toolchain 文件 Makefile 交叉编译要点 pkg-config 交叉编译 产物校验 工具链目录结构 快速入门 CMake 工作原理 ...

October 14, 2026 · 17 min

Makefile

Make 面向 Linux / C/C++ / 交叉编译(ARM、MIPS uClibc 工具链)的构建笔记。 Make 基础概念 Make 通过比较**目标(target)与其依赖(prerequisite)的修改时间(mtime)**决定是否重建:只要任一依赖比目标新,就执行该目标的命令,并沿依赖图递归向上。 ...

October 14, 2026 · 10 min

ASan

内存错误检查 AddressSanitizer(ASan) 下面日志中的 heap-buffer-overflow 是堆缓冲区越界写,不是内存泄漏。ASan 主要检测越界、释放后使用等错误;泄漏检测由 LeakSanitizer 提供,在部分平台可与 ASan 集成。 g++ -fsanitize=address -o test_asan memory.cpp -g plh@plh-virtual-machine:~/work/MyProject/c++/plh/DataStructrues/1.linear_List$ ./test_asan ================================================================= ==12293==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x602000000018 at pc 0x5578e1a712ff bp 0x7ffe0f40ead0 sp 0x7ffe0f40eac0 WRITE of size 4 at 0x602000000018 thread T0 #0 0x5578e1a712fe in func() /home/plh/work/MyProject/c++/plh/DataStructrues/1.linear_List/memory.cpp:6 #1 0x5578e1a71314 in main /home/plh/work/MyProject/c++/plh/DataStructrues/1.linear_List/memory.cpp:11 #2 0x7fdbb00f2082 in __libc_start_main ../csu/libc-start.c:308 #3 0x5578e1a711ad in _start (/home/plh/work/MyProject/c++/plh/DataStructrues/1.linear_List/test_asan+0x11ad) 0x602000000018 is located 4 bytes to the right of 4-byte region [0x602000000010,0x602000000014) allocated by thread T0 here: #0 0x7fdbb071b587 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cc:104 #1 0x5578e1a7127e in func() /home/plh/work/MyProject/c++/plh/DataStructrues/1.linear_List/memory.cpp:5 #2 0x5578e1a71314 in main /home/plh/work/MyProject/c++/plh/DataStructrues/1.linear_List/memory.cpp:11 #3 0x7fdbb00f2082 in __libc_start_main ../csu/libc-start.c:308 SUMMARY: AddressSanitizer: heap-buffer-overflow /home/plh/work/MyProject/c++/plh/DataStructrues/1.linear_List/memory.cpp:6 in func() Shadow bytes around the buggy address: 0x0c047fff7fb0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x0c047fff7fc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x0c047fff7fd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x0c047fff7fe0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x0c047fff7ff0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 =>0x0c047fff8000: fa fa 04[fa]fa fa fa fa fa fa fa fa fa fa fa fa 0x0c047fff8010: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c047fff8020: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c047fff8030: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c047fff8040: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c047fff8050: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa Shadow byte legend (one shadow byte represents 8 application bytes): Addressable: 00 Partially addressable: 01 02 03 04 05 06 07 Heap left redzone: fa Freed heap region: fd Stack left redzone: f1 Stack mid redzone: f2 Stack right redzone: f3 Stack after return: f5 Stack use after scope: f8 Global redzone: f9 Global init order: f6 Poisoned by user: f7 Container overflow: fc Array cookie: ac Intra object redzone: bb ASan internal: fe Left alloca redzone: ca Right alloca redzone: cb Shadow gap: cc ==12293==ABORTING

October 14, 2026 · 1 min

GDB

gdb调试 问题: arm-mol-linux-uclibcgnueabihf-gdb: loadlocale.c:130: _nl_intern_locale_data: Assertion `cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' failed. Aborted (core dumped) 在运行GDB前临时修改locale环境变量,可以有效避免此问题: export LC_ALL=C export LANG=C 在启动 gdb 时传递参数 使用 --args 选项启动 gdb gdb --args ./main 10001 /home/meian/work/MyProject/study/reator/reatorHttp/readme/ 在 gdb 内部设置参数 启动 gdb 后,使用 set args 命令设置参数,然后运行 ...

October 14, 2026 · 5 min

docker

Docker 配置 国内镜像 在Docker daemon 的全局配置文件 /etc/docker/daemon.json写入: { "registry-mirrors": [ "https://mirror.ccs.tencentyun.com" ] } 配置完重启docker sudo systemctl restart docker Docker的client 你输入命令 docker pull nginx │ ↓ Docker CLI /usr/bin/docker │ │ /var/run/docker.sock ↓ Docker daemon dockerd │ │ 读取 ↓ /etc/docker/daemon.json │ ↓ Registry Mirror │ ↓ 腾讯云镜像站 常用命令 镜像类 查看镜像 docker images 拉取镜像 docker pull docker pull mysql # 未指定标签时使用 latest;latest 是普通标签,不保证代表最新发布版本 运行镜像 docker run docker run tomcat 容器类 查看正在运行的容器 docker ps docker ps -a # 查看所有容器 #加格式化方式访问,格式会更加清爽 docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}" 停止容器 docker stop 容器名 docker stop nginx 启动容器 docker start 容器名 docker start nginx docker restart 容器名 docker restart nginx 删除容器 #删除一个 docker rm 容器ID docker rm nginx docker rm -f 容器ID #强制删除 docker rm -f nginx #删除多个 docker rm -f $(docker ps -a -q) 或 docker ps -a -q | xargs docker rm 参考:docker image pull。

October 14, 2026 · 1 min

Git

相关笔记:GDB 调试、ASan 内存检查、学习资源。 Git https://learngitbranching.js.org/?locale=zh_CN Git的三个区域 Git 的文件有三种状态区域: 区域 命令 说明 工作区 (Working Directory) 你编辑的实际文件 改动还没 add 暂存区 (Staging Area/index) 用 git add 后进入这里 等待被 commit 本地仓库 (Repository) 用 git commit 后进入这里 已经记录在历史中 对应命令区别: ...

October 14, 2026 · 15 min

编译器

现代编译器通常采用“三段式”架构,分为:前端(Frontend)、中端(Optimizer,优化器)和后端(Backend,代码生成器)。前端的任务是把程序员编写的、具备特定语法的高级语言源代码(如 C++、Java、Python),翻译成一种与具体硬件平台无关的中间表示(IR,Intermediate Representation),同时检查代码中的语法和语义错误。 ...

October 14, 2026 · 2 min