このビデオでは､ リンカーエラーについて､ なぜ起こりうるのかを説明します｡
リンカーエラーは､ リンカーがプログラムのすべてのピースを組み合わせて実行ファイルを作成しようとしているときに､
1つまたは複数のピースが欠けている場合に発生します｡
一般的には､ オブジェクトファイルやライブラリがリンカーに見つからない場合に発生することがあります｡
リンカーエラーを修正するのは厄介なことです｡
時には､ リンカーが足りない部分がどこにあるかわかるように､ パスを正しく設定することも必要です｡
コードライトに向かい､ プログラムに強制的にリンカーエラーを発生させ､ エラーメッセージがどのように表示されるかを確認しましょう｡
こちらのサンプルコードですが､ 構文は無視してください｡
これは実際にはCプラスアルファのコードですが､ リンカーエラーに関係するものです｡
i o ストリームは気にしないでください｡
stdcoutは気にしないでください｡
ここでの主旨は､ リンクエラーはCとCプラスプラスで同じということです｡
そして､ ここでのコーディング例は､ リンカーエラーを再び示そうとしているに過ぎません｡
そこで､ code lightで､ 私たちが使っているテンプレートをもとに､ Linker Errorというプロジェクトを作りました｡
だからMainしかないんです｡ cpp ファイルで､ Hello world と書いてあります｡
さて､ ここで強制的にリンカーエラーを発生させることにします｡
本来ならやりたくないことですが､ エラーの様子をお見せするためにやってみたいと思います｡
つまり､ これから言うのは､ extern int c､ あるいはXとでも言いましょうか､ このすべてをちょっとだけ説明します｡
そして､ メインの本文では､ すぐそこにあるXを使うように心がけたい｡
ただの整数で､ それをプリントアウトするとします｡
Xをプリントアウトしたいだけなんです､ 単純な話ですが｡
これは保存しておこうと思います｡
では､ このプログラムをコンパイルするとどうなるか､ 見てみましょう｡
右クリックでコンパイルしてみる｡
クリーンコンパイルができる
プログラムには何の問題もないのですが､ ビルドして実行しようとすると
リンカーエラーを見ることができました｡
これは典型的なリンカーエラーです｡
何かに対する未確定な言及｡
この場合､ それはたまたまxであっただけです｡
また､ ここでリンカーが1を返したことに気づくでしょう｡
LDは終了状態である1を返します｡
つまり､ リンクに何か問題があったということですね｡
コンパイラのエラーは出なかったので､ 明らかにコンパイラが正常であることがわかります｡
それをまたやるんです｡
コンパイルがありますね｡
エラーもなく､ 警告もない｡
では､ ここで説明させていただきますね｡
ここでタッチペンを使ってみましょう｡
そして､ メインとなるCPPファイルをここでコンパイルして､ メイン・ドット・ゼロ､ つまりメイン・ドット・オブジェクトにするわけです｡
ここでは､ EXEを参照しています｡
その場で確認できます｡
その場で見ることができます｡
この中にexeへの参照があるので､ それを使うことにします｡
ここで､ Oストリーム・ライブラリもあるので､ リンカーはこれらのライブラリを取得する必要があります｡
リンカーはこの2つを組み合わせて､ 私のメインexeを作る必要があります｡
あるいはこの場合､ リンカーエラーexeになるかと思います｡
でも､ わかるでしょ？
だから､ コンパイルは問題ない｡
オブジェクトファイルを作成しました｡
このライブラリは存在します｡
問題は､ ここでコンパイラに「このxは私の中にはない」と伝えてしまっていることです｡
別の場所にあるんです｡
誰かによって定義されているのです｡
まあ､ 明らかに誰かによって定義されたものではないのですが｡
つまり､ リンカーはそのXを解決する必要があるのです｡ 「よし､ その値をどこに持っていけば印刷できるか？
だって､ この場で頼まれたことでしょう？
xの値を表示させたい｡
xはどこにあるのか？
見つけることができないのです｡
それがリンカーエラーです｡
まさに､ その通りです｡
そして､ エラーメッセージをもう一度見ていただくために､ もう一度ビルドしてみます｡
作って走らせるものです｡
そして､ エラーメッセージがある｡
Xへの未定義の参照と言っている｡
何が起こっているのか､ 正確に把握することができます｡
Xを見つけることができない｡
さて､ これはコンパイラのエラーではありません｡
これはリンカーエラーです｡
それは､ 本当に大切なことです｡
リンカーエラーを修正するのは厄介です｡
リンクに必要なファイルが見つからないことが多々あります｡
彼らは間違った場所にいる｡
このコースではコードライトを使ってその心配をする必要はなく､ 基本的にすべて自分たちで行います｡
しかし､ サードパーティーのライブラリを使う場合は､ このようなことはもっと中級や上級のコースでお話しすることになるでしょう｡
でも､ 万が一リンカーエラーが出たときのために､ リンカーエラーをお見せしたかったのです｡ フォーラムに投稿していただければ､
一緒に解決しましょう｡