如果未使用方法本身,则忽略方法中的未定义符号

Ignore undefined symbol in a method if the method itself is not used

本文关键字:方法 符号 未定义 使用方法 如果      更新时间:2023-10-16

我正在NIOS II系统上移植Arduino框架,根据配置(普通/小型C库),该系统可能具有或没有可用的atof()功能。当然,使用atof()实现String::toDouble()也不能总是存在。但是,我仍然想为使用普通 C 库的用户提供它。期望的行为:

  • 小C库,用户不调用String::toDouble()- 框架应该编译
  • 小C库,用户调用String::toDouble()- 框架应该编译失败
  • 普通 C 库用户不调用String::toDouble()- 框架应该编译
  • 普通C库,用户调用String::toDouble()- 框架应该编译

我该如何实现这一点?普通/小型 C 库之间的选择是作为链接器的命令行选项实现的,据我所知,应用程序在编译时没有定义选择的宏可用。

当前的NIOS工具链基于GCC 5.3.0,但较旧的设备仅受基于GCC 4.7.3的旧工具链的支持。我更喜欢一种适用于两者的解决方案。

我该如何实现?

您可以尝试使用-ffunction-sections构建并与--gc-sections链接。

String::toDouble()应放在输出文件中其自己的部分中,然后由链接器进行垃圾回收(如果未实际使用)。请参阅 ld 文档:

-

-GC部分

启用未使用的输入部分的垃圾回收。

和 gcc 文档:

-功能部分

将每个函数或数据项放入输出中其自己的部分中 文件(如果目标支持任意节)。