链接器的隐秘世界:从符号解析到重定位的技术全景

每一个 C 程序员都遇到过这样的错误:undefined reference to 'foo' 或 multiple definition of 'bar'。编译通过了,但链接器拒绝了你的代码。那一刻,你可能只会机械地检查头文件、库路径或声明顺序,然后继续工作。但你是否想过,链接器究竟在做什么?为什么它能容忍某些重复定义,却对另一些报错?为什么同一个程序在静态链接和动态链接下行为不同? ...

12 min · 5985 words

应用程序启动为何如此之慢:从动态链接器到代码签名的完整技术解析

1995年,Linux从a.out二进制格式迁移到ELF。这个改变带来了更灵活的共享库支持——不再需要中央分配的虚拟地址空间槽位,库可以按需加载和替换。但灵活性是有代价的:程序启动变慢了。 ...

11 min · 5164 words