如果未使用方法本身,则忽略方法中的未定义符号
Ignore undefined symbol in a method if the method itself is not used
我正在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 文档:
-功能部分
将每个函数或数据项放入输出中其自己的部分中 文件(如果目标支持任意节)。
相关文章:
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 在C++中使用内联方法时出现未定义的符号错误
- 寻找一种更好的方法来表示无符号字符数组
- 在 std::vector<无符号字符中存储任意数据的方法>
- 使用192/256位整数求和无符号64位整数向量的点积的最快方法
- 仅在少数方法(静态或共享库)中解析的外部符号
- 一种将 Dart 中的字节数据转换为 C++ 中的无符号字符*的有效方法?
- 在C++中,将无符号整数转换为八进制表示,反之亦然的最佳方法是什么
- 有没有一种预处理器的方法可以从调试符号中删除代码段
- 计算机使用什么方法添加无符号整数
- 为什么链接器报告全局函数的乘法定义符号,而不是类静态方法
- 为C++字符串中的特殊符号 (") 赋予文字含义的有效C++方法
- 在 C++/CLI 中从本机转换为管理无符号短的最快方法
- 为大无符号整数分配内存的有效方法
- 获取两个无符号整数 C++ 乘积的高 32 位的有效方法
- 根据浮点符号对浮点进行舍入的最简单方法是什么
- 在 cpp 正文中声明方法时未定义的符号
- 如果未使用方法本身,则忽略方法中的未定义符号
- 标准::字符串::空的未定义符号错误;Mac OS High Sierra 上的 c++ 标准方法链接错误