6

Effective C++を読んだだけで、コンパイラエラーではなく「リンカーエラー」について何度か言及しています。

「リンカーエラー」とは何ですか?「コンパイラエラー」とはどう違いますか? これを論理的に覚えるための一連のカテゴリに基づいたルール/説明はありますか?

4

3 に答える 3

12

コンパイラ エラーは、提供されたソース コードをコンパイラがオブジェクト コードに変換できなかったことを意味します。これは通常、自分のプログラムに構文上または意味上のエラーがあることを意味し、プログラムが意図した動作を示す前に解決する必要があります。

リンカ エラーは、提供されたオブジェクト コードからリンカが実行可能プログラムをビルドできなかったことを意味します。これは通常、プログラムが自身の依存関係や外部の世界 (外部ライブラリなど) と適切に連携していないことを意味します。

于 2013-02-18T23:17:50.360 に答える
1

gcc -cコンパイルしてリンクしません:

   -c  Compile or assemble the source files, but do not link.  The linking
       stage simply is not done.

ファイルをコンパイルしてから、次のようにリンクできます-o

$ gcc -c hello.s
$ gcc -o test hello.o 
$ ./test 
Hi World
于 2013-02-19T01:27:25.970 に答える
1

コンパイラ エラーは、コンパイル中のコードのセマンティクス、つまりソースからオブジェクト ファイルへの変換プロセスに関連するエラーのクラスです。pthread_createここで、使用できると想定される特定のシンボル (たとえば ) を定義している場合があります。

リンカー エラーは、最終的なオブジェクト ファイルの作成中にこれらの依存関係が検証されるときに発生するエラーです。上記の例では、実行可能ファイルを作成するために、pthread_create見つからない場合にリンカー エラーが発生する定義が必要です。

于 2013-02-18T23:20:53.323 に答える