2025
Rust 工具链、项目布局、程序的编译链接和 Cargo 配置
Rust
Cargo
介绍使用 rustup 管理 Rust 工具链,Rust 程序的目录布局,编译链接和 Cargo 配置。
Linux 内核的 llvm 编译和 clangd 支持
Gnu
Kernel
Clangd
介绍使用 llvm clang 编译器编译 Linux 内核的过程,内核头文件原理和生成 clangd 语言服务器所需的编译命令 JSON 文件的过程。
GCC 交叉编译工具链
·
Gnu
Compiler
Glibc
Gcc
交叉编译是指编译器能生成和它执行环境不同的 CPU 架构的二进制,例如在 arm64 机器上编译出在 x86_64 机器上运行的二进制。
本文分别以常用的 ubuntu aarch64 和 fedora 40 x86_64 编译环境为例,介绍这两个问题的解决方案。
使用 musl 交叉编译和静态链接
·
Cgo
Go
Compile
Gcc
Musl
本文介绍了使用轻量化 libc 库 musl 进行交叉编译生成多架构二进制的方案,最终实现在 x86_64 编译机器上能同时构建出静态链接的 x86_64 和 aarch64 二进制的目标,大大简化了多套构建脚本的开发和维护成本。
Go CGO 程序静态编译链接
·
Cgo
Go
Compile
Gcc
使用 linux bpftrace 进行内核和应用性能分析
Bpftrace
Kernel
Ebpf
Performance
Tool
介绍 bpftrace 工具的使用方式、局限性和问题。
使用 linux perf 进行内核和应用性能分析
Perf
Kernel
Performance
Tool
介绍 perf 工具的使用方式、局限性和问题。
2023
Linux 函数调用栈展开
·
Elf
Dwarf
Debug
介绍 Linux 函数调用栈生成和展开(stack unwinding)机制。
向 ELF 二进制添加元数据信息
·
Elf
介绍向 ELF 文件中添加自定义数据的方法。
readelf
·
Elf
Debug
Tool
readelf 是显示 ELF 二进制文件(可执行程序或动态库等)中各 Section 内容的重要工具。
显示符号表 Sections,如 .dnysym 和 .symtab 中的符号名称和地址; 显示 DWARF 格式的 Sections,如各种 .debug_xx,.eh_frame 等; 显示查找 debuginfo 文件所需的 .gnu_debuglink 和 .note.gnu.build-id ;
objdump
·
Elf
Debug
Tool
objdump 是 ELF 文件查看和反汇编工具。
ELF 符号表和 DWARF 调试符号表
·
Elf
Debuginfo
Dwarf
介绍 Linux ELF 二进制文件的符号表和调试符号表(.debug_XX)生成、管理机制。