标签 · C++

2 篇文章,记录每一次探索。

[链接器的世界-实验篇10] 不再原样复制:常量合并与展开表重建
在 class8 的 ET_EXEC 后端中合并重复常量,映射输入偏移,并为存活代码重建 .eh_frame 与搜索索引。
阅读全文
[链接器的世界-原理篇14] C++ 与 Rust:语言特性留下的链接难题
两个 .cpp 包含同一个头文件,各自生成了同一个 inline 函数和模板实例,链接却不报重复定义。本文从这个谜题出发,读懂 Itanium C++ ABI 的名字修饰(_Z、N...E、模板参数、S_ 替换)、extern "C",以及为什么普通函数不编码返回类型;用汇编拆开 COMDAT 组和弱定义这两种 vague linkage 实现,复现 vtable 卷入的 ODR 违规和 undefined reference to vtable;用链接顺序演示静态初始化顺序问题,看 init_priority 与 .init_array.N 的排序、guard 变量与 __cxa_guard_acquire。Rust 部分拆开 rlib,对比 legacy 与 v0 两套修饰,看 no_mangle、used、link_section,用 --print link-args 逐项读 rustc 交给链接器的命令行和依赖顺序,比较 panic=unwind 与 panic=abort 的大小,最后不带标准库和 C 运行时链接一个最小的 Rust 程序。
阅读全文