web-dev-qa-db-ja.com

コンパイル時エラー「アーキテクチャx86_64の未定義シンボル」はどういう意味ですか?

私はC++テキストブックの例の隣接リストを使用してグラフクラスをプログラムしようとしていますが、このコマンドを使用してコンパイルすると、コード:g ++ -o prog program.cpp ...次のエラーが表示されます:

Undefined symbols for architecture x86_64:
  "_main", referenced from:
      start in crt1.10.6.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

...これはどういう意味ですか?それは私のコードの問題であることが判明するかもしれませんが、多くの異なるプロジェクトで残念ながら完全に解決されたいくつかの異なるプロジェクトで同じ一見不可解なエラーを受け取ったので、それよりも深いかもしれません偶然。

32ビットまたは64ビットライブラリを使用しているかどうかに関係している可能性があり、タグ-m32または-m64を使用する必要があるかもしれないことをどこかで読みましたが、これがここに当てはまるかどうかはわかりません。興味深いことに、-m64タグを追加しようとしたときに同じエラーが発生しましたが、-m32タグを使用しようとしたときに同じエラーが発生しましたが、

Undefined symbols for architecture i386:
  "_main", referenced from:
      start in crt1.10.6.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

代わりに。

主に、エラーが何を言っているのかを知りたいだけです。私はコードの特定の行などを与えるコンパイル時エラーのデバッグに慣れていますが、これからはそのようなことを見分けることはできません。何か案は?

うまくいけば、Intel Core 2 Duo(64ビット)を搭載した2008年後半のMacbookを使用し、OS X Lion(10.7.2)を実行しています。これは最新バージョンだと思います。また、私はgccバージョン4.2.1を使用しています。

34
gravity black

ファイルをコンパイルすると、コンパイラは実行可能ファイルを生成しようとするリンカーを呼び出します。ただし、プログラムの起動時に実行される関数であるmainという名前の関数を提供しなかったため、できません。

複数のファイルを個別にコンパイルしてから結合するため、リンカを実行したくない場合。その場合は、-cフラグは、リンクステージをスキップするようコンパイラーに指示します。

または、コンパイル済みファイルを実行することもできます。次に、関数mainを実装する必要があります。

41