Open In App
Related Articles

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

Improve Article
Improve
Save Article
Save
Like Article
Like

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
Output 
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper
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++




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


C




// C program to demonstrate difference
// in output in 32-bit and 64-bit gcc
// File name: geek.c
 
#include<stdio.h>
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 write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. 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
Previous
Next
Similar Reads