2012-04-22 29 views
6

好像編譯器選項-malign-double已從Clang中刪除。示例代碼:Clang是否與GCC的-malign-double標誌等價?

#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; 
} 

當與GCC在32位模式下(-m32)編譯,這可以被輸出爲8或4製成取決於如果-malign-double啓用或不分別。但鏘似乎並不支持這個選項:

$ clang test.c -m32 -malign-double 
clang: warning: argument unused during compilation: '-malign-double' 
$ ./a.out 
4 

鏘版本:

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 

我似乎無法找到鏘支持的編譯器標誌的完整列表上的任何正式文件,他們只是似乎大部分時間都遵循GCC的文檔。

Clang中是否有與-malign-double相同的當前值?或者我堅持不得不現在使用不同的編譯器?我需要它來編譯一些代碼,該代碼鏈接到使用該標誌的僅使用二進制文件的第三方庫。

+0

你有沒有得到任何答案? – tito 2012-07-22 21:13:36

+0

好吧,看起來它仍然不可能,正如有人告訴我的irc:「沒有選擇,如果可能的話(如不受ABI約束),LLVM將使用自然對齊|如果它是生成代碼,你總是可以使用屬性強制對齊「 – tito 2012-07-22 21:28:28

回答

1

顯然可以使用-mllvm -malign-double作爲解決方法。從https://codereview.chromium.org/1310173005

報價:

雖然LLVM支持-malign-double選項,鏘沒有。 傳入-mllvm -malign-double不能用作解決方法,因爲 它會導致Clang 和LLVM使用不同的機器描述。

相關問題