GCC - Compila o código de 32 bits no sistema de 64 bits

1

Estou estudando Assembly e preciso compilar uma parte do código C em um arquivo executável de 32 bits. A questão é que eu continuo recebendo esse erro. Eu tentei instalar gcc-multilib e g ++ - lib, mas não ajudou. Alguém sabe o que pode estar acontecendo?

> gcc main.s -m32 -o main

/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc.a when searching for -lgcc
/usr/bin/ld: cannot find -lgcc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: cannot find -lgcc_s
collect2: error: ld returned 1 exit status

Usando o gcc versão 4.8.5 (Ubuntu 4.8.5-4ubuntu4) no Ubuntu 16.10.

Atualização: Adicionado o comando de compilação. Eu compilei o arquivo .s com antecedência usando gcc -m32 -S main.c porque eu precisava dar uma olhada no código Assembly.

    
por ruby-miner 15.04.2017 / 03:21

2 respostas

1

O pacote gcc-multilib fornece apenas suporte de 32 bits para o compilador padrão atual.

Como você está usando um compilador não padrão ( gcc-4.8 versus o padrão do sistema gcc-6 ), será necessário instalar explicitamente o pacote multilib subjacente específico da versão, por exemplo,

sudo apt install gcc-4.8-multilib

(ou o equivalente do seu gerenciador de pacotes favorito).

    
por steeldriver 15.04.2017 / 14:01
0

Esta resposta do nosso site Estouro de pilha : Como compilar um binário de 32 bits em uma máquina linux de 64 bits com gcc / cmake :

export CFLAGS=-m32

A questão tem 117 votos positivos e a resposta aceita também tem 117 votos positivos.

Agora, os dois têm 118 depois de mim.

    
por WinEunuuchs2Unix 21.06.2018 / 02:47