搜索

pdf文档 Shared Libraries

1.40 MB 69 页 0 下载 55 浏览 0 评论 0 收藏
所属分类: 后端开发 / C++
语言 格式 评分
英语
.pdf
3
摘要
文档讨论了共享库在Windows、Linux和C++中的实现与设计。详细介绍了共享库的基本概念、术语、动态链接过程以及不同操作系统的实现差异。特别强调了Linux和Windows在共享库设计上的根本区别,分析了Linux设计的历史包袱,并提供了构建共享库的最佳实践建议,如使用-fvisibility=hidden和-Bsymbolic等编译选项。文档还探讨了链接器的作用、符号重定义问题以及C++标准在共享库支持方面的不足。
AI总结
### 文档总结 #### 1. **共享库的基本概念** - **共享库**(Shared Library)是用于代码共享的机制,常见的实现包括: - **Shared Object (SO)**:Linux中的共享库。 - **Dynamic Shared Object (DSO)**:与SO类似。 - **DLL**:Windows中的动态链接库。 - **二进制文件**可以是可执行文件或共享库,**符号**(如函数或全局变量)是共享库的重要组成部分。 #### 2. **Linux与Windows的设计差异** - **Linux**的设计受到早期目标的限制,导致一些复杂性。 - **Windows**的共享库机制与Linux完全不同,但在某些方面更为灵活。 #### 3. **技术细节** - **动态节(Dynamic Section)**:用于记录共享库的依赖关系和符号信息。 - **符号表(.dynsym)**:包含共享库导出的符号及其版本信息。 - **编译选项**: - `/OPT:ICF` 或 `-icf=all/safe`:用于代码折叠。 - `/OPT:REF` 或 `-fvtable-gc`:用于消除无用代码。 #### 4. **推荐实践** - **Linux**: - 使用 `-fvisibility=hidden` 和 `-Bsymbolic` 选项隐藏未导出符号,避免符号重定位。 - 使用 `-fvisibility-inlines-hidden` 和 `-fno-semantic-interposition` 避免语义干扰。 - **Windows**: - 共享库符号无法被覆盖,确保代码的安全性和稳定性。 #### 5. **共享库与静态库的比较** - **共享库**: - 优点:版本控制、减少磁盘占用。 - 缺点:性能和 locality 可能不如静态库。 - **静态库**: - 优点:性能和 locality 更好。 - 缺点:二进制文件较大。 #### 6. **C++的特殊性** - **Windows**:共享库符号无法被覆盖。 - **Linux** 和 **Mac**:允许符号覆盖,但 Mac 需要特殊选项(如 `-flat_namespace`)。 #### 7. **结论** - **共享库**的设计在不同平台上有显著差异,开发者需了解其优缺点并合理选择。 - **链接器**的复杂性和活跃开发使其成为动态链接的重要工具。 - **C++标准**需要进一步改进,以更好地支持共享库的使用。 通过合理使用共享库和遵循推荐实践,可以提高程序的性能、减少资源占用,并确保代码的安全性和可维护性。
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
P11
P12
下载文档到本地,方便使用
- 可预览页数已用完,剩余 57 页请下载阅读 -
文档评分
请文明评论,理性发言.