studio español ubuntu 64bit 32-bit

ubuntu studio 17.04 español



¿Cómo compilar aplicaciones de 32 bits en Ubuntu de 64 bits? (3)

La instalación de Multiarch se admite al agregar la información de la arquitectura a los nombres de los paquetes que desea instalar (en lugar de instalar estos paquetes usando nombres alternativos, que podrían estar disponibles o no).

Consulte esta respuesta para obtener más información sobre las instalaciones multiarcas (modernas).

En su caso, sería mejor instalar el gcc de 32 bits y la libc:

sudo apt-get install libc6-dev:i386 gcc:i386

Instalará los paquetes de desarrollo libc de 32 bits y gcc, y todos los paquetes dependientes (todas las versiones de 32 bits), junto a su instalación de 64 bits sin romperlo.

Estoy intentando compilar una aplicación C de 32 bits en Ubuntu Server 12.04 LTS de 64 bits usando gcc 4.8. Recibo mensajes de error del vinculador sobre bibliotecas incompatibles y skipping -lgcc . ¿Qué debo hacer para compilar y vincular aplicaciones de 32 bits?


Para obtener Ubuntu Server 12.04 LTS de 64 bits para compilar programas gcc 4.8 de 32 bits, deberá hacer dos cosas.

  1. Asegúrese de que todas las herramientas de desarrollo de gcc 4.8 de 32 bits estén completamente instaladas:

    sudo apt-get install lib32gcc-4.8-dev

  2. Compila programas usando la bandera -m32

    gcc pgm.c -m32 -o pgm


Ubuntu 16.04

sudo apt-get install gcc-multilib

Por alguna razón, en Ubuntu 17.04, también necesité instalar la versión específica:

sudo apt-get install gcc-6-multilib

Entonces un mundo hola mínimo:

#include <stdio.h> int main() { puts("Hello world!"); return 0; }

compila sin advertencia bajo:

gcc -m32 -pedantic-errors -std=c89 -Wall hello_world.c

y:

./a.out

da: Hello world! como se esperaba, y:

file a.out

dice:

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]=87c87a83878ce7e7d23b6236e4286bf1daf59033, not stripped

y:

qemu-i386 a.out

también da: Hello world! pero fallaría con un ejecutable x86_64

Además, tengo:

Entonces creo que funciona :-)

Consulte también: No se puede encontrar crtn.o, que enlaza el código de 32 bits en el sistema de 64 bits

Es una pena que este paquete entre en conflicto con los compiladores cruzados como gcc-arm-linux-gnueabihf https://bugs.launchpad.net/ubuntu/+source/gcc-defaults/+bug/1300211