web-dev-qa-db-ja.com

GCC-64ビットシステムで32ビットコードをコンパイルする

私はアセンブリを勉強していますが、Cコードを32ビットの実行可能ファイルにコンパイルする必要があります。問題は、このエラーが引き続き発生することです。 gcc-multilibとg ++-libをインストールしようとしましたが、助けにはなりませんでした。誰が何が起こっているのか知っていますか?

> 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

Ubuntu 16.10でgccバージョン4.8.5(Ubuntu 4.8.5-4ubuntu4)を使用します。

更新:コンパイルコマンドが追加されました。アセンブリコードを確認する必要があるため、gcc -m32 -S main.cを使用して事前に.sファイルをコンパイルしました。

2
ruby-miner

gcc-multilibパッケージは、現在のデフォルトコンパイラの32ビットサポートのみを提供します。

デフォルト以外のコンパイラ(gcc-4.8対システムのデフォルトgcc-6)を使用しているため、基礎となるバージョン固有のmultilibパッケージを明示的にインストールする必要があります。

Sudo apt install gcc-4.8-multilib

(または、お気に入りのパッケージマネージャーからの同等のもの)。

5
steeldriver

姉妹サイトからのこの回答Stack Overflow2 gcc/cmakeを使用した64ビットLinuxマシンのビットバイナリ

export CFLAGS=-m32

質問には117のアップ投票があり、受け入れられた回答にも117のアップ投票があります。

現在、どちらも私の後の118を持っています。

0