gccは-m32とリンクしません


23

64ビットシステムで最も単純な(int main(){})プログラムでさえコンパイルしようとすると-m32失敗します。

$ gcc -m32 test.c
/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

-m32が指定されている場合、間違ったディレクトリを誤って検索しているようです。

libgcc-4.8-dev:i386がインストールされ、32ビットライブラリがにあることを確認しました/usr/lib/gcc/i686-linux-gnu/4.8/

設定とエクスポートLD_INCLUDE_PATHを試みましたLD_LIBRARY_PATHが、役に立ちませんでした。


回答:


23

まず、「gcc-multilib」と「g ++-multilib」をインストールする必要があります

sudo apt-get install gcc-multilib g++-multilib

その後、現在のコマンドが機能します。

$ cat hello.c
#include <stdio.h>

int main(int argc, char *argv[]) {
    puts("Hello, World!");
}
$ uname -a
Linux vbox-1404 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
$ gcc -m32 hello.c
$ ./a.out
Hello, World!
$ file a.out
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]=80bdc95e2941e3ba8d7bb7c1682098f20e77cebc, not stripped

2
注:C ++プログラムの場合g++-multilibも必要です。
ウラジミールパンテレエフ14年

1
以下も考慮してくださいlibc6-dev-i386
ケノーブ

0

x86_64環境でCコードをx86 32ビット実行可能ファイルに正常にコンパイルするには、次の追加パッケージをインストールする必要があります。

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

次のようなコンパイル呼び出しの後

$ gcc -m32 test.c -o test

成功します。


0

この問題は、gccバージョンがのバージョンと一致しない場合にも発生しgcc-multilibます。この場合、正しいバージョンのmultilibパッケージをインストールする必要があります。例えば; 私は、gccのバージョンを使用していた4.6私はインストールする必要がありましたので、gcc-4.6-multilibおよびg++-4.6-multilibデフォルトのため、gcc-multilibパッケージがためでした4.8

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.