2

make コマンドを実行すると、次の出力が得られます。

g++ -DUNIX -Wall -g -I../include -I. main.o hfpage.o hfp_driver.o                      test_driver.o db.o new_error.o page.o system_defs.o buf.o -o hfpage 

/usr/bin/ld: Warning: size of symbol `error_string_table::error_string_table(Status, char const**)' changed   from 18 in db.o to 34 in buf.o
/usr/bin/ld: i386:x86-64 architecture of input file `buf.o' is  incompatible with i386 output
collect2: ld returned 1 exit status
make: *** [hfpage] Error 1

このファイルは hfpage.o を生成し、これを使用して実行しようとする./hfpage.oと、エラー メッセージが表示されますbash: ./hfpage.o: cannot execute binary file

システムに何か問題がありますか?

4

3 に答える 3

1

まず、エラー メッセージはbuf.o別のアーキテクチャ用にコンパイルされたことを示しています。おそらく 64 ビット マシン上の 32 ビットです。

実行できない理由./hprof.ohprof.o、実行可能ファイルではなく、バイナリ オブジェクトであるためです。このコンパイルが完了した場合、-oフラグがないため、実行可能ファイルにはa.out、歴史的な理由から UNIX 実行可能ファイルのデフォルト名となる名前が付けられます。

あなたの問題は、おそらくmakeファイルの前のステップで発生します。基本的に、次のようないくつかの行が必要です

main.o: 
   g++ -DUNIX -Wall -g -I../include -I. -c main.C

そして、次のような最終行

main:
   g++ -DUNIX -Wall -g -o main main.o hfpage.o hfp_driver.o

アーキテクチャ メッセージはbuf.o、別のコンパイラまたはコンパイラ フラグでコンパイルしたことを示唆しています。

于 2012-09-27T03:24:49.870 に答える
1

x86-64 バージョンのライブラリを使用して、i386 アーキテクチャ用のアプリをビルドしようとしています。x86-64 ライブラリを誤ってインストールした可能性があります。

于 2012-09-27T03:25:13.187 に答える
1

リンクされているファイルの 1 つが、残りのファイルとは異なるバイナリ出力になっているようです。コンパイル時に-m32 or -m64フラグを設定していないことを確認し、設定しg++ている場合は一貫していることを確認してください。これを実行したら、すべてのバイナリが正しい出力タイプmake cleanmake再構築されることを確認するために、何度も実行します。

また、.oファイルは通常バイナリ オブジェクトであり、実行可能ファイルではないため、実行しないでください。Makefile のターゲットをチェックして、実行可能ファイルを確認してください。

于 2012-09-27T03:25:43.447 に答える