Effective C++を読んだだけで、コンパイラエラーではなく「リンカーエラー」について何度か言及しています。
「リンカーエラー」とは何ですか?「コンパイラエラー」とはどう違いますか? これを論理的に覚えるための一連のカテゴリに基づいたルール/説明はありますか?
Effective C++を読んだだけで、コンパイラエラーではなく「リンカーエラー」について何度か言及しています。
「リンカーエラー」とは何ですか?「コンパイラエラー」とはどう違いますか? これを論理的に覚えるための一連のカテゴリに基づいたルール/説明はありますか?
コンパイラ エラーは、提供されたソース コードをコンパイラがオブジェクト コードに変換できなかったことを意味します。これは通常、自分のプログラムに構文上または意味上のエラーがあることを意味し、プログラムが意図した動作を示す前に解決する必要があります。
リンカ エラーは、提供されたオブジェクト コードからリンカが実行可能プログラムをビルドできなかったことを意味します。これは通常、プログラムが自身の依存関係や外部の世界 (外部ライブラリなど) と適切に連携していないことを意味します。
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
コンパイラ エラーは、コンパイル中のコードのセマンティクス、つまりソースからオブジェクト ファイルへの変換プロセスに関連するエラーのクラスです。pthread_create
ここで、使用できると想定される特定のシンボル (たとえば ) を定義している場合があります。
リンカー エラーは、最終的なオブジェクト ファイルの作成中にこれらの依存関係が検証されるときに発生するエラーです。上記の例では、実行可能ファイルを作成するために、pthread_create
見つからない場合にリンカー エラーが発生する定義が必要です。