C++ 在Visual Studio中编译gcc代码会导致错误C3646:&x27__属性';:未知重写说明符
我得到以下错误: 错误C3646:“\uuuuuuuuuuuuuuuuuu属性”:未知重写说明符 代码: 完全错误: 1> c:\program files\indri\indri 5.9\include\indri\greedy\u vector(52):错误C3646:“\uuu属性”:未知覆盖说明符C++ 在Visual Studio中编译gcc代码会导致错误C3646:&x27__属性';:未知重写说明符,c++,visual-studio,gcc,msvc12,C++,Visual Studio,Gcc,Msvc12,我得到以下错误: 错误C3646:“\uuuuuuuuuuuuuuuuuu属性”:未知重写说明符 代码: 完全错误: 1> c:\program files\indri\indri 5.9\include\indri\greedy\u vector(52):错误C3646:“\uuu属性”:未知覆盖说明符 其他信息:我正在尝试在Visual Studio项目中使用indri.lib。该\uuuu属性\uuuu命令是gcc的编译器特定命令。它用于的第52行,其中: 为指定类型的变量指定最小对齐方式
其他信息:我正在尝试在Visual Studio项目中使用indri.lib。该
\uuuu属性\uuuu
命令是gcc的编译器特定命令。它用于的第52行,其中:
为指定类型的变量指定最小对齐方式(以字节为单位)
Visual studio实际上有一个类似的对齐命令:。但有两个问题:
\uu declspec(align(#))
不支持默认的:\uu属性(aligned))
行为,该行为将:\uu declspec(align(#))
是一个前缀<代码>属性((对齐(#))是一个后缀。这意味着您的实际代码需要在位置上有所不同:struct S{short f[3];}uuu属性uuu((对齐));//gcc路线定义
__declspec(align(16))strict S{short f[3];};//MSVC校准
这里的要点是,您最好使用#ifdef
编译任何使用uuu属性((对齐))
的行,然后编写自己的u declspec(对齐(#))
有关更多信息,请参阅:
在对lemur_platform.h进行了更多的研究之后,代码似乎已经为您完成了上述所有工作!您会注意到,
#define LEMUR\u POSTALIGN\uuu属性u((对齐))
被包装在一个#ifndef WIN32
中。因此,您需要做的是在VisualStudio项目中定义WIN32
你介意提供你的代码吗?应该是。你的标题和问题有不同的错误信息。LEMUR\u POSTALIGN
是这个意思吗?若我并没有错的话,我认为win32是在VisualStudio项目中自动定义的。或者有什么具体的方法来定义win32吗?@asimseed我想你是在想\u win32
,这就是。您需要定义WIN32。我建议使用预处理器参数,这样您就可以将其放在项目代码中而不是代码中。要做到这一点,请使用指令。
LEMUR_PREALIGN char _stack[ sizeof(_Type) * _Count ] LEMUR_POSTALIGN;