質問

外部のコンパイル済みオブジェクト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
役に立ちましたか?

解決

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

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

他のヒント

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

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

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

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

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

sudo apt-get install ia32-libs 
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top