外部のコンパイル済みオブジェクト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
Coreset.oは64ビット用にコンパイルされたと思いますが、それを32ビットのcompute.oとリンクしています。
gcc(1) の '-m64'フラグを使用して、computation.cを再コンパイルできます。
'-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