私はアセンブリを勉強していますが、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ファイルをコンパイルしました。
gcc-multilib
パッケージは、現在のデフォルトコンパイラの32ビットサポートのみを提供します。
デフォルト以外のコンパイラ(gcc-4.8
対システムのデフォルトgcc-6
)を使用しているため、基礎となるバージョン固有のmultilibパッケージを明示的にインストールする必要があります。
Sudo apt install gcc-4.8-multilib
(または、お気に入りのパッケージマネージャーからの同等のもの)。
姉妹サイトからのこの回答Stack Overflow: 2 gcc/cmakeを使用した64ビットLinuxマシンのビットバイナリ :
export CFLAGS=-m32
質問には117のアップ投票があり、受け入れられた回答にも117のアップ投票があります。
現在、どちらも私の後の118を持っています。