I had to compile a 32-bit application using GNU gcc on the 64-bit version of Linux.

Luckily, gcc man page directed me to the ‘-m32’ and ‘-m64’ options. These options generate code for 32-bit or 64-bit environments, respectively.

  1. The 32-bit environment sets int, long and pointer to 32 bits and generates code that runs on any i386 system.
  2. The 64-bit environment sets int to 32 bits and long and pointer to 64 bits and generates code for AMD’s x86-64 architecture.

You can pass -m64 or -m32 options as follows to Gnu gcc

For 32 bit version:
$ gcc -m32 -o output32 hello.c
For 64 bit version :
$ gcc -m64 -o output64 hello.c
Run it as follows:
$ ./output32
Output:

Long int size is 4 bytes long!

Now let us see 64 bit output:
$ ./output64

Long int size is 8 bytes long!

Sample code – hello.c

#include <stdio.h>
int main(){
        long z; printf("Long int size is %i bytes long!\n", sizeof(z)); return 0;
}

A note about glibc-devel on 64 bit systems

You may see an error as follows on 64 bit system when you try to build 32 bit app:

/usr/include/gnu/stubs.h:7:27: error: gnu/stubs-32.h:

This error message shows up on the 64 bit systems where GCC multilib feature is enabled, and it indicates that 32 bit version of libc is not installed. To fix this problem, on a CentOS/RHEL 5.x type the following yum command:
# yum -y install glibc-devel.i386 libstdc++-devel.i386
To fix this problem, on a CentOS/RHEL 6.x type the following yum command:
# yum -y install glibc-devel.i686 glibc-devel ibstdc++-devel.i686
To fix this problem on a Debian or Ubuntu Linux type the following apt-get command:
$ sudo apt-get install g++-multilib libc6-dev-i386
To fix this problem on a Suse (SLES) / OpenSUSE Linux type the following zypper command:
# zypper in glibc-devel-32bit

See also

# Additional correction by Braden B and others; Editing by VG – log #

🥺 Was this helpful? Please add a comment to show your appreciation or feedback.

nixCrat Tux Pixel Penguin
Hi! 🤠
I'm Vivek Gite, and I write about Linux, macOS, Unix, IT, programming, infosec, and open source. Subscribe to my RSS feed or email newsletter for updates.

30 comments… add one
  • Ali B Mahmood Apr 1, 2012 @ 9:17

    Dear Sir\
    My MAC is 64-bit and I would like to install the following libraries
    1-gawk 2-gmp 3-mpfr 4- mpc 5- libtool 6- gcc 7- hydra 8- mpich2 9- netcdf 10- paralel-netcdf
    So, what is instructions for installation ,Is it as the same instructions if by MAC 32-Bit
    or not
    Regards
    ALI B Mahmoos

  • vir Jun 27, 2012 @ 16:16

    under ubuntu you could check your OS by CLI as uname -a. If it returns i686 it is 32 bit OS or if x86_64 then it is 64 bit OS

  • me Nov 25, 2013 @ 16:42

    thank you for the gcc command … it is good … BUT

    no, it is NOT working … EVER !

    the PROPER documentation SHOULD INCLUDE also the proper libraries for compiling with the different platform, otherwise this is TOTALLY USELESS, it will ALWAYS GIVE YOU MISSING LIBS ERRORS !

    now, you may think that i have a too loud voice, but i actually try to help your tutorial, also i managed to fix it on my system (mint/ubuntu/debian i used: apt-get install libc6-dev-i386 and managed to get x86 exec on a x64 system)

  • gnu assembler Nov 11, 2014 @ 4:12

    as –32 -o junk.o junk.s

  • Rodrigo Oct 12, 2016 @ 17:02

    Hi, I have a problem. I use Fedora 24 and i cannot install this library.

Leave a Reply

Your email address will not be published. Required fields are marked *

Use HTML <pre>...</pre> for code samples. Your comment will appear only after approval by the site admin.