Rockchip RK3399Pro datasheet: Symbol versioning with GNU tools i...

需积分: 45 50 下载量 33 浏览量 更新于2024-08-06 收藏 534KB PDF 举报
本文档主要讨论了在嵌入式系统开发中,Rockchip RK3399Pro平台上的版本控制和链接过程,特别是与GNU工具链(如gcc)相关的技术。首先,作者提到了通过执行`nm app.exe | grep getVersion`命令来确认应用程序app.exe链接到的是特定版本的getVersion函数,这里是VER1.0版本。 接着,文档介绍了GNU扩展中的`.symver`指令,这是一种在程序文件(如b.c)中创建带版本号别名符号的方法。通过`.symver old_getVersion,getVersion@VER1.0`和`.symver new_getVersion,getVersion@@VER2.0`,编译器可以在不同版本号下提供同一函数的不同实现。在这个例子中,当默认版本为VER2.0时,链接器会优先选择new_getVersion函数。 链接过程的关键是链接脚本(linker script),在本案例中使用了`.lds`文件。链接脚本负责指定输入section的放置和输出文件的布局,确保版本兼容性。文档中提到的VER1.0和VER2.0版本在脚本中是必需的,因为它们对应着`.symver`指令中引用的版本号。 连接器(linker)默认行为可以通过`ld –verbose`选项查看,而自定义链接行为可以通过`-T`选项指定链接脚本,或者使用其他链接命令进行扩展。链接器区分输入section(如目标文件的section)和输出section(最终可执行文件的section),后者包括loadable和allocatable两种类型,它们在运行时会被映射到进程地址空间,并可能有各自的VMA和LMA地址。 理解这些概念对于开发者来说至关重要,特别是在处理多版本兼容性和性能优化时,能够有效地管理代码的版本依赖以及确保程序在不同平台上正确链接和运行。此外,正确使用`.symver`指令和链接脚本可以帮助开发者在不修改源代码的情况下,实现版本间功能的平滑迁移。