【发布时间】:2012-04-22 20:12:31
【问题描述】:
似乎 -malign-double 编译器选项已从 Clang 中删除。示例代码:
#include <stddef.h>
#include <stdio.h>
typedef struct X { char a; long long b; } X;
int main(void)
{
printf("%zd\n", offsetof(X, b));
return 0;
}
当在 32 位模式 (-m32) 下使用 GCC 编译时,这可以输出 8 或 4,具体取决于是否分别启用了 -malign-double。但 Clang 似乎不支持此选项:
$ clang test.c -m32 -malign-double
clang: warning: argument unused during compilation: '-malign-double'
$ ./a.out
4
Clang 版本:
Apple clang version 3.1 (tags/Apple/clang-318.0.58) (based on LLVM 3.1svn)
Target: x86_64-apple-darwin11.3.0
Thread model: posix
我似乎在 Clang 支持的编译器标志的完整列表中找不到任何官方文档,它们似乎大部分都遵循 GCC 的文档。
Clang 中是否有与-malign-double 等效的电流?还是我现在不得不使用不同的编译器?我需要它来编译一些链接到使用该标志的纯二进制第三方库的代码。
【问题讨论】:
-
你得到答案了吗?
-
好吧,看起来这仍然不可能,正如有人在 irc 上告诉我的那样:“
如果可能的话(例如不受 ABI 限制),LLVM 将使用自然对齐 | 如果是生成代码,总是可以使用属性强制对齐"
标签: gcc clang compiler-flags