我得到以下错误:
代码:错误C3646: '__attribute__':未知的覆盖说明符
LEMUR_PREALIGN char _stack[ sizeof(_Type) * _Count ] LEMUR_POSTALIGN;
完全错误:
1>c:program filesindriindri 5.9includeindrigreedy_vector(52): error C3646: '__attribute__': unknown override specifier
附加信息:我正在尝试使用indri。
__attribute__
命令是gcc特定于编译器的命令。它在该文件的第52行与((align))
命令一起使用,其中:
为指定类型
的变量指定最小对齐方式(以字节为单位)
Visual studio实际上有一个类似的对齐命令:align
。但是有两个问题:
-
__declspec(align(#))
不支持默认的:__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
编译任何使用__attribute__ ((aligned))
的行,并编写自己的__declspec(align(#))
。
更多信息请参见:GCC vs MSVC类打包和对齐
在对lemur_platform.h进行了更多的研究之后,看起来代码已经为您完成了上述所有工作!您将注意到#define LEMUR_POSTALIGN __attribute__ ((aligned))
被包装在#ifndef WIN32
中。所以你需要做的就是在你的Visual Studio项目中定义WIN32
!