32

外部のコンパイル済みオブジェクトcoreset.oを使用してプログラムをコンパイルしようとしました。public01.cテストファイルを作成しました。関数はcomputation.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
4

5 に答える 5

35

coreset.oは64ビット用にコンパイルされており、32ビットのcalculation.oとリンクしていると思います。

gcc(1)の「-m64」フラグを使用してcomputation.cを再コンパイルしてみてください。

于 2008-10-19T04:29:31.083 に答える
7

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

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

于 2008-10-19T06:04:39.973 に答える
4

私が使用していたコンパイラのバージョンが、coreset.oで実行されたコンパイル済みのバージョンと一致しなかったことがわかりました。

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

于 2008-10-19T04:29:02.160 に答える
4

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

于 2008-10-19T04:29:37.700 に答える
2
sudo apt-get install ia32-libs 
于 2012-01-09T21:29:04.583 に答える