我得到了以下错误:
错误C3646:‘__属性__’:未知覆盖说明符
代码:
LEMUR_PREALIGN char _stack[ sizeof(_Type) * _Count ] LEMUR_POSTALIGN;完全错误:
1>c:\program文件\indri\indri 5.9\include\indri\greedy_vector(52):错误C3646:‘__属性_’:未知覆盖说明符
附加信息:我试图在Visual项目中使用indri.lib。
发布于 2015-10-03 15:30:44
__attribute__命令是gcc特定于编译器的命令。它在这个文件的第52行与命令一起使用,其中:
指定指定类型变量的最小对齐方式(以字节为单位)。
Visual实际上有一个类似的对齐命令:align。但是有两个问题:
__declspec(align(#))不支持defaulted:__attribute__ ((aligned))行为,该行为将:将类型对齐到正在为其编译的目标计算机的最大有用对齐方式。
__declspec(align(#))是一个前缀。__attribute__((aligned(#)))是后缀。这意味着您的实际代码需要在位置上有所不同:struct S { short f[3]; } __attribute__ ((aligned)); // gcc alignment definition __declspec(align(16)) strict S { short f[3]; }; // MSVC alignment
这里的要点是,您最好通过编译任何使用#ifdef并编写自己的__declspec(align(#))的行来进行__declspec(align(#))编程。
有关更多信息,请参见:GCC对MSVC类包装和对齐
在对lemur_platform.h做了更多的研究之后,看起来代码已经为您完成了所有上述工作!您会注意到,#define LEMUR_POSTALIGN __attribute__ ((aligned))封装在#ifndef WIN32中。因此,您需要做的是在Visual项目中定义WIN32!
https://stackoverflow.com/questions/32923135
复制相似问题