web-dev-qa-db-ja.com

gccエラー:間違ったELFクラス:ELFCLASS64

外部のコンパイル済みオブジェクトcoreset.oを使用してプログラムをコンパイルしようとしました。私はpublic01.cテストファイルを作成し、私の関数は両方ともコンパイルされます、calculation.cにあります。ただし、リンクに失敗します。何が問題なのでしょうか?

gcc -o public01.x public01.o computation.o coreset.o
ld: fatal: file coreset.o: wrong ELF class: ELFCLASS64
ld: fatal: File processing errors. No output written to public01.x
collect2: ld returned 1 exit status
31
zxcv

Coreset.oは64ビット用にコンパイルされたと思いますが、それを32ビットのcompute.oとリンクしています。

gcc(1) の '-m64'フラグを使用して、computation.cを再コンパイルできます。

35
CMS

'-m32'または '-m64'を指定して、コンパイルモードを選択できます。

Autoconf(configure)スクリプトを扱うとき、通常は環境でCC = "gcc -m64"(またはCC = "gcc -m32")を設定して、すべてが正しいビットでコンパイルされるようにします。少なくとも、通常...人々はそれをうまく機能させない方法を無限に見つけますが、私の打率は非常に高く(95%以上)です。

7

私が使用していたコンパイラーのバージョンは、coreset.oでコンパイルされたバージョンと一致していませんでした。

1つは32ビットで、もう1つは64ビットでした。他の誰かが同様の問題に遭遇した場合に備えて、これは残しておきます。

4
zxcv

オブジェクトファイルは64ビットツールチェーンでコンパイルされ、32ビットツールチェーンを使用しているようです。オブジェクトファイルを32ビットモードで再コンパイルしようとしましたか?

4
John Millikin
Sudo apt-get install ia32-libs 
2
Diogo