Open In App
Related Articles

How to compile 32-bit program on 64-bit gcc in C and C++

Improve Article
Save Article
Like Article

Mostly compiler(gcc or clang) of C and C++, nowadays come with default 64-bit version. Well it would be a good option in terms of speed purposes. But it would lead to problem, if someone wants to run their program as a 32-bit rather than 64-bit for testing or debugging purposes. Therefore we must have a knowledge about this.
Before proceeding forward, let’s confirm which bit-version of gcc is currently installed in our system. 
Just type the following command on Linux terminal. 

Command: gcc -v
Using built-in specs.
Target: x86_64-linux-gnu

Hence the fourth line Target: x86_64-linux-gnu confirms that we are running 64-bit gcc.
Now in order to compile with 32-bit gcc, just add a flag -m32 in the command line of compiling the ‘C’ language program. For instance, to compile a file of geek.c through Linux terminal, you must write the following command with -m32 flag. 

Command: gcc -m32 geek.c -o geek

If you get an error as follows: 

fatal error: bits/predefs.h: No such file or directory

Then it indicates that a standard library of gcc is been missing. In that case you must install gcc-multlib by using the following command: 

For C language:
sudo apt-get install gcc-multilib
For C++ language:
sudo apt-get install g++-multilib

After that you will be able to compile a 32-bit binary on a 64-bit system.
How to check whether a program is compiled with 32-bit after adding a “-m32” flag? 
Well we can easily check this by the following program. 


// C++ program to demonstrate difference
// in output in 32-bit and 64-bit gcc
// File name: geek.c
using namespace std;
int main()
    cout << "Size = " << sizeof(size_t);
// This code is contributed by sarajadhav12052009


// C program to demonstrate difference
// in output in 32-bit and 64-bit gcc
// File name: geek.c
int main()
    printf("Size = %lu", sizeof(size_t));

Compile the above program in Linux by these two different commands, 
Default 64-bit compilation, 

Input: gcc -m64 geek.c -o out
Output: ./out
Size = 8

Forced 32-bit compilation, 

Input: gcc -m32 geek.c -o out
Output: ./out
Size = 4

Can we conclude anything from above program. Yes maybe, let’s try to understand more. 
Since the size of data types like long, size_t, pointer data type(int*, char* etc) is compiler dependent, therefore it will generate a different output according to bit of compiler.
If you like GeeksforGeeks and would like to contribute, you can also write an article using or mail your article to See your article appearing on the GeeksforGeeks main page and help other Geeks.

Whether you're preparing for your first job interview or aiming to upskill in this ever-evolving tech landscape, GeeksforGeeks Courses are your key to success. We provide top-quality content at affordable prices, all geared towards accelerating your growth in a time-bound manner. Join the millions we've already empowered, and we're here to do the same for you. Don't miss out - check it out now!

Last Updated : 11 Jun, 2022
Like Article
Save Article
Similar Reads