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

时间:2018-01-21 01:15:48

标签: c++ dependencies

我在NIOS II系统上移植Arduino框架,根据配置(普通/小C库),可能有not have atof()功能。当然,使用String::toDouble()实现的atof()也不一定存在。但是,我仍然想让普通C库的用户可以使用它。期望的行为:

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

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

目前的NIOS工具链基于GCC 5.3.0,但旧设备只支持基于GCC 4.7.3的旧工具链。我更希望找到一种适合两者的解决方案。

1 个答案:

答案 0 :(得分:1)

  

我怎么能实现这个?

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

String::toDouble()应放在输出文件中自己的部分中,然后如果实际上没有使用,则由链接器进行垃圾收集。见ld documentation

  

- GC-部分

     

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

gcc documentation

  

-ffunction截面

     

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