Cómo compilar un programa de 32 bits en gcc de 64 bits en C y C++

Principalmente compilador (gcc o clang) de C y C++, hoy en día viene con una versión predeterminada de 64 bits . Bueno, sería una buena opción en términos de velocidad. Pero daría lugar a problemas, si alguien quiere ejecutar su programa como de 32 bits en lugar de 64 bits para fines de prueba o depuración. Por lo tanto, debemos tener un conocimiento acerca de esto.
Antes de continuar, confirmemos qué versión de bits de gcc está instalada actualmente en nuestro sistema. 
Simplemente escriba el siguiente comando en la terminal de Linux. 
 

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
......................
......................

Por lo tanto, la cuarta línea Target: x86_64-linux-gnu confirma que estamos ejecutando gcc de 64 bits.
Ahora, para compilar con gcc de 32 bits, simplemente agregue un indicador -m32 en la línea de comando de compilación del programa de lenguaje ‘C’. Por ejemplo, para compilar un archivo de geek.c a través de la terminal de Linux, debe escribir el siguiente comando con el indicador -m32
 

Command: gcc -m32 geek.c -o geek

Si obtiene un error de la siguiente manera: 
 

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

Luego indica que falta una biblioteca estándar de gcc. En ese caso, debe instalar gcc-multlib utilizando el siguiente comando: 
 

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

Después de eso, podrá compilar un binario de 32 bits en un sistema de 64 bits.
¿Cómo verificar si un programa está compilado con 32 bits después de agregar un indicador «-m32»?  
Bueno, podemos verificar esto fácilmente con el siguiente programa. 
 

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 el programa anterior en Linux con estos dos comandos diferentes, 
compilación predeterminada de 64 bits, 
 

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

Compilación forzada de 32 bits, 
 

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

¿Podemos concluir algo del programa anterior? Sí, tal vez, tratemos de entender más. 
Dado que el tamaño de los tipos de datos como long, size_t , tipo de datos de puntero (int*, char*, etc.) depende del compilador, generará una salida diferente según el bit del compilador.
Este artículo es una contribución de Shubham Bansal . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *