Linux явно реализует 32-битную поддержку, если опция компиляции:
CONFIG_IA32_EMULATION=y
установлено.
Это делают большинство нормальных дистрибутивов, включая Ubuntu 14.04.
32-битная эмуляция, конечно, возможна только потому, что процессоры x86-64 спроектированы так, чтобы быть обратно совместимыми с 32-битными исполняемыми файлами через режим 32-битной эмуляции, который ядро знает как использовать.
Еще одна вещь, о которой вам нужно беспокоиться - это библиотеки: для компиляции 32-битных программ вам нужны 32-битные библиотеки. В Ubuntu 14.04 AMD64:
sudo apt-get install gcc-multilib
Тогда мы можем легко проверить это с привет миром:
#include <stdio.h>
#include <stdlib.h>
int main() {
puts("hello world");
return EXIT_SUCCESS;
}
и
gcc -m32 hello_world.c
./a.out
Какие отпечатки:
hello world
И
file a.out
подтверждает, что это 32 бит:
ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=358f7969deeb2f24a8dd932a0d296887af4eae30, not stripped