具有静态链接语言运行时的警告

主要观点:

  • 多数编程语言提供语言运行时库,Linux 中共享库的默认设置可能使语言运行时在静态库时更复杂。
  • 介绍了 C 编译模型,包括对象文件、归档(静态库)和共享对象(动态库)等概念及相关细节。
  • 共享对象有导出符号列表,默认会导出对象中的所有外部符号,如 Flang 编译器使用静态库实现运行时会导出大量符号,带来诸多问题。
  • 详细阐述了 Flang 相关的问题及表现,如与 OpenMPI 共享对象链接时可能出错、运行时调试报错位置不准确、增加动态链接成本等。
  • 介绍了控制符号导出的方法,如使用--exclude-libs排除库或使用版本脚本,同时指出版本脚本的优缺点及在 C++标准库中的应用。

关键信息:

  • Linux 中共享库默认会导出大量符号,可能导致链接错误等问题。
  • Flang 编译器使用静态库实现运行时会导出大量符号。
  • 控制符号导出的方法有--exclude-libs和版本脚本。
  • 版本脚本可更精确控制符号导出,但目前工具支持不足。

重要细节:

  • C 编译模型中对象文件、归档和共享对象的生成及链接过程。
  • 共享对象导出符号的机制及默认行为。
  • Flang 测试用例及相关符号导出情况。
  • 链接不同库时使用--exclude-libs和版本脚本的示例及效果。
阅读 7
0 条评论