【发布时间】:2017-10-08 23:06:45
【问题描述】:
我正在为 ARM 设备(无操作系统)编写裸机应用程序。我需要 32 位枚举,所以我使用 -fno-short-enums 编译器标志编译了应用程序。如果没有这个标志,我会得到变量枚举(并且通过向每个枚举添加额外的 0xFFFFFFFF 值来强制大小不是一种选择)。
现在我收到每个对象的以下链接器警告:
c:/gcc-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/bin/ld.exe: warning: ./src/test.o uses 32-bit enums yet the output is to use variable-size enums; use of enum values across objects may fail
这只是一个警告,没有错误。但这究竟是什么意思?如何指定“输出”?
我尝试使用上述标志重新编译 newlib 以确保所有对象使用相同的枚举大小,但我仍然收到警告。有什么我错过的吗?
【问题讨论】:
-
为什么需要 32 位枚举?
-
也许你应该为链接器添加一些标志,并为所有对象使用短枚举。
-
我需要它来兼容其他平台/处理器上的软件部件。我绝对需要 32 位枚举。
-
什么样的兼容性?网络?
-
顺便说一句,你不使用其他一些库吗?显示完整的构建日志:)