Wygląda na to, że opcja kompilatora -malign-double
została usunięta z Clang. Przykład Kod:Czy Clang ma odpowiednik flagi -malign-double GCC?
#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;
}
wkompilowaną GCC w trybie 32-bitowym (-m32
), może być do wyjścia 8 lub 4, w zależności czy -malign-double
jest włączony, czy nie, odpowiednio. Ale Clang nie wydaje się wspierać tę opcję:
$ clang test.c -m32 -malign-double
clang: warning: argument unused during compilation: '-malign-double'
$ ./a.out
4
wersja 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
ja nie mogę znaleźć żadnej oficjalnej dokumentacji na pełną listę flag kompilatora obsługiwanych przez Clang, po prostu Wydaje się, że w większości przypadków odkładają się one na dokumentację GCC.
Czy istnieje prąd równoważny z -malign-double
w Clang? Czy utknąłem na razie, aby użyć innego kompilatora? Potrzebuję go do skompilowania kodu, który łączy się z biblioteką firm trzecich, która używa tej flagi.
Czy otrzymałeś na to odpowiedź? – tito
OK, wygląda na to, że nadal nie jest możliwe, jak ktoś mi powiedział na IRC: " nie ma opcji, jeśli to możliwe (np. Nie ograniczone przez ABI), LLVM użyje naturalnego wyrównania | jeśli jest wygenerowany kod, ty zawsze może wymusić wyrównanie za pomocą atrybutów " –
tito