c - “错误:尝试向后移动 .org”使用 Xtensa XCC,GCC 工作正常
问题描述
这是一个最小的可重现示例:
/*
* Example for Xtensa xt-xcc compiler "error: attempt to move .org backwards".
*/
struct k_dict
{
char *m_name_dict;
char *p_name_dict;
union
{
float f_value;
int i_value;
char* s_value;
};
};
struct k_mode
{
const char* m_name;
int p_number;
const struct k_dict *p;
const struct k_dict pars[];
};
struct k_dict P1[] =
{
{.m_name_dict="M1", .p_name_dict="P1", .s_value="string"},
{.m_name_dict="M2", .p_name_dict="P2", .i_value=5 },
{.m_name_dict="M3", .p_name_dict="P3", .f_value=48.0 }
};
struct k_mode mode_default =
{
.m_name = "default",
.p_number = 1,
.p = P1,
.pars =
{
{.m_name_dict = "m", .p_name_dict="p", .s_value="s"}
}
};
int main( int argc, char **argv )
{
return 0;
}
使用 Tensilica Xtensa xt-xcc 编译器编译它会产生汇编错误:
"xt-xcc" -c -g -O0 -std=c11 -fmessage-length=0 -DPROC_hifi3_tv_car_5 -DCONFIG_hifi3_tv_car_5 --xtensa-system=hifi3_tv_car_5/config --xtensa-core=hifi3_tv_car_5 --xtensa-params= "\"HelloWorld/main.c\"" -o "\"HelloWorld/bin/hifi3_tv_car_5/Debug/main.o\""
/Temp/cc0s#6c7c.a32040: Assembler messages:
/Temp/cc0s#6c7c.a32040:39: Error: attempt to move .org backwards
xt-xcc ERROR: XtensaTools/bin/xt-as.exe returned non-zero status 1
这可能来自哪里?
注意:GCC 工作正常。
解决方案
似乎 C11 不受支持xt-xcc
,即使在-std=c11
添加标志时编译器也没有报告警告。
来自 Xtensa 手册:“只能通过 Clang 前端的选项启用对 C11 标准的支持。(...) 从 RG-2017.7 版本开始,XCC 包括一个基于 Clang 版本 3.4 的替代编译器前端-std=c11
LLVM 项目。在未来的版本中,Clang 前端将替换 GCC。使用-clang
编译器选项选择 Clang 前端。 "
使用 Clang 可以很好地编译上面的代码。
推荐阅读
- javascript - 动态访问对象属性
- bash - 来自 ~/.azure/config 的 Azure CLI 环境变量
- c# - 使用 Mailkit v2.9.0 从电子邮件中获取发件人
- r - 将列表列就地转换为字符串
- python - 将列表值应用于字典列表
- html - 以较小的宽度将行布局折叠到列,而不会丢失前一个元素的顶部边距
- python - 如何从文件对象中读取带有 pyarrow 的 csv.gz 文件?
- objective-c - macOS 上的动画 NSView 约束(图层支持视图)objective-c
- docker - 使用`docker run -- rm`时有没有办法找到容器的运行时间
- python - 居中多行图例标题