Rozumiem, że kompilatory C ++ nie są ze sobą kompatybilne. Jednak nie byłem w stanie znaleźć niczego na ten temat, w szczególności dla C. Wiem, że standard C pozostawia wiele miejsca dla kompilatorów do implementacji rzeczy, które uznają za stosowne: na przykład rozmiar i wyrównanie większości (wszystkich?) Typów danych jest definiowane pod kątem implementacji, z pewnymi minimalnymi gwarancjami. Dlatego dwa kompilatory (lub dwie wersje tego samego kompilatora) mogą nie zgadzać się co do wielu szczegółów.
Czy mam rację, sądząc, że nie ma gwarancji, że dwa pliki obiektowe skompilowane z różnymi kompilatorami faktycznie się połączą? Na przykład rozmiar wskaźników może wynosić 32 bity w jednym pliku obiektowym i 64 bity w drugim. Ale jeśli tak, to dlaczego biblioteki C są czasami dystrybuowane we wstępnie skompilowanej formie? Czy jest oczekiwanie, że użyję tego samego kompilatora, którego używali (np. Gcc), lub jakiegoś faktycznego standardu, który zapewni zgodność binarną? I w jaki sposób inne języki z interfejsem języka obcego zapewniają prawidłowe wyrównanie podczas łączenia z plikami obiektów C?