2

我收到以下错误:

错误 C3646:“__attribute__”:未知的覆盖说明符

代码:

LEMUR_PREALIGN char _stack[ sizeof(_Type) * _Count ] LEMUR_POSTALIGN;

完全错误:

1>c:\program files\indri\indri 5.9\include\indri\greedy_vector(52): 错误 C3646: '__attribute__': 未知覆盖说明符

附加信息:我正在尝试在 Visual Studio 项目中使用 indri.lib。

4

1 回答 1

2

__attribute__命令是 gcc 的编译器特定命令。它在该文件的第 52 行与((align))命令一起使用,其中:

为指定类型的变量指定最小对齐方式(以字节为单位)

Visual Studio 实际上有一个类似的对齐命令:align. 但是有两个问题:

  1. __declspec(align(#))不支持 defaulted:__attribute__ ((aligned))行为,该行为将:

将类型与您正在编译的目标机器的最大有用对齐方式对齐

  1. __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 与 MSVC 类打包和对齐


在对 lemur_platform.h 进行了更多研究之后,看起来代码已经为您完成了上述所有工作!你会注意到它#define LEMUR_POSTALIGN __attribute__ ((aligned))被包裹在一个#ifndef WIN32. 所以你需要做的是WIN32在你的 Visual Studio 项目中定义!

于 2015-10-03T15:30:44.180 回答