gcc won't link with -m32

Solution 1:

First, you need to install "gcc-multilib" and "g++-multilib"

sudo apt-get install gcc-multilib g++-multilib

Then your current command will work,

$ cat hello.c
#include <stdio.h>

int main(int argc, char *argv[]) {
    puts("Hello, World!");
}
$ uname -a
Linux vbox-1404 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
$ gcc -m32 hello.c
$ ./a.out
Hello, World!
$ file a.out
a.out: ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=80bdc95e2941e3ba8d7bb7c1682098f20e77cebc, not stripped

Solution 2:

This works for me. I'm on Ubuntu 18.04, x86-64.

First, gcc and gcc-multilib must match the version of each other. If you have installed multi versions of gcc on your machine, then you have to specify one version as the priority. For example I choose gcc 4.8:

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 51

The greater the last number specified, the more priority it gets. You can check them out by using this command:

update-alternatives --config gcc

Then you have to install the version of gcc-multilib that match the version of gcc:

sudo apt-get install gcc-4.8-multilib

Done.