使LLVM / Clang与16位对齐

时间:2011-06-21 18:30:46

标签: objective-c xcode macos llvm

我正在开发一个遗留项目,其中包含大量可追溯到OS X之前的文件。它的数据已经16位对齐> 15年。我想转向完整的LLVM编译,但我似乎无法使2字节对齐工作。是否有适用于此的编译器级别选项? (以前使用-malign-mac68k)

我知道这里的#pragma pack(2)选项。但是,这需要我修改超过1000个源文件以包含此文件。这是一个最糟糕的选择,但它似乎是一个黑客。此外,如果可以,那么肯定有一个默认选项来设置对齐吗?

4 个答案:

答案 0 :(得分:8)

根据clang的消息来源,它确实支持mac68k对齐规则。现在似乎只能通过“#pragma options align = mac68k”启用它。如果你对小铿锵黑客没问题,那么你也可以实现cmdline选项并将补丁提交给clang。

答案 1 :(得分:2)

我建议您查看#pragma pack(请参阅http://msdn.microsoft.com/en-us/library/2e70t5y1%28v=vs.80%29.aspxhttp://gcc.gnu.org/onlinedocs/gcc/Structure_002dPacking-Pragmas.html)。它相对容易使用,并且可以与任何Apple编译器一起使用。

答案 2 :(得分:0)

我在ibm的人员编写的osx上使用最新的gcc / gortran,如果你阅读了gcc手册,那么至少有8种不同的对齐优化可以考虑不仅仅是大量的恶意

答案 3 :(得分:-1)

由于系统级标头采用默认对齐方式(在大多数情况下它们没有覆盖对齐的指令),因此更改所有内容的对齐方式将破坏OS调用。因此,您不希望这样做。

只需编写脚本即可将#pragma pack(2)应用于相关的源文件,避免使用#include。它相对容易,不太可能引起不幸的副作用。