无论何时在代码中调用 m_NCS_SEL_OBJ_ZERO(&nSelObjSet) 等 OSAF 调用,我们都会遇到这些约束错误。这是使用tilera编译器-tile-g++进行交叉编译时的情况。使用 g++ 它总是编译得很好。任何指示都会有帮助。
注意:m_NCS_SEL_OBJ_ZERO 是一个宏,替换为 FD_ZERO
示例代码:
// initialise and set selection object set
m_NCS_SEL_OBJ_ZERO(&nSelObjSet);
m_NCS_SEL_OBJ_SET(nMdsSelObj, &nSelObjSet);**
错误如下:
/u/TILERA/STACK/DEV/lte/lte_enb/enb_cfgmgr/src/ConfigManagerThread.cxx:
"/u/TILERA/STACK/DEV/lte/lte_enb/enb_cfgmgr/src/ConfigManagerThread.cxx", line 103: error:
unknown asm constraint letter 'c'
m_NCS_SEL_OBJ_ZERO(&nSelObjSet);
^
"/u/TILERA/STACK/DEV/lte/lte_enb/enb_cfgmgr/src/ConfigManagerThread.cxx", line 103: error:
unknown asm constraint letter 'D'
m_NCS_SEL_OBJ_ZERO(&nSelObjSet);
^
"/u/TILERA/STACK/DEV/lte/lte_enb/enb_cfgmgr/src/ConfigManagerThread.cxx", line 103: error:
unknown asm constraint letter 'a'
m_NCS_SEL_OBJ_ZERO(&nSelObjSet);
^
"/u/TILERA/STACK/DEV/lte/lte_enb/enb_cfgmgr/src/ConfigManagerThread.cxx", line 110: error:
unknown asm constraint letter 'q'
if (m_NCS_SEL_OBJ_ISSET(nMdsSelObj, &nSelObjSet))
^
4 errors detected in the compilation of "/u/TILERA/STACK/DEV/lte/lte_enb/enb_cfgmgr/src/ConfigManagerThread.cxx".
/u/TILERA/STACK/DEV/lte/lte_enb/enb_cfgmgr/src/EnbCfgMgr.cxx:
问题在于您的交叉编译构建是从主机系统获取标头,而不是适合目标的标头。
这些“未知”asm 约束字母是 i386 特定的字母,用于 glibc 的 FD_ZERO() 和 FD_ISSET() 的 i386 特定定义。