【C言語】”lnk2019:未解決の外部シンボルが参照されました “が発生する原因と対処法

この記事では、「lnk2019:未解決の外部シンボルが参照されました」というエラーが発生する原因と、その対処法について解説します。

C言語のプログラミング初心者の方にも分かりやすく、具体的な例を交えながら説明しています。

目次から探す

“lnk2019:未解決の外部シンボルが参照されました “とは

リンカエラーとは

リンカエラー(Linker Error)は、プログラムのビルド時に発生するエラーの一種です。

リンカは、複数のオブジェクトファイルやライブラリを結合して実行可能なプログラムを生成する役割を持っています。

リンカエラーは、この結合処理中に発生するエラーを指します。

lnk2019:未解決の外部シンボルが参照されました

“lnk2019:未解決の外部シンボルが参照されました”は、リンカエラーの一種であり、プログラムがコンパイルされた後に発生します。

このエラーは、プログラム内で使用されている関数や変数などの外部シンボルが、定義されていないか、またはリンクされていないことを示しています。

このエラーが発生する主な原因は、以下のようなものがあります。

関数や実装が不足している場合

関数や変数を使用する前に、プロトタイプ宣言した場合、必ず実装しておく必要があります。

実装が不足していると、リンカはそのシンボルを見つけることができず、エラーが発生します。


// 関数の定義が不足している例
//プロトタイプ宣言だけして、処理を書いていない
int add(int a, int b);
int main() {
    int result = add(3, 5); // LNK2019エラー
    return 0;
}

ライブラリがリンクされていない場合

外部のライブラリを使用する場合、そのライブラリをリンクする必要があります。

ライブラリがリンクされていないと、関数や変数が見つからずにエラーが発生します。


// mathライブラリを使用する場合
#include <stdio.h>
#include <math.h>
int main() {
    double result = sqrt(16.0);
    printf("Square root of 16 is %f\n", result);
    return 0;
}

オブジェクトファイルが不足している場合

プログラムが複数のソースファイルから構成されている場合、それぞれのソースファイルをコンパイルしてオブジェクトファイルを生成し、それらをリンクする必要があります。

オブジェクトファイルが不足していると、関数や変数が見つからずにエラーが発生します。


// add.cとmain.cの2つのソースファイルから構成されるプログラムの例
// add.c
int add(int a, int b) {
    return a + b;
}
// main.c
#include <stdio.h>
int add(int a, int b);
int main() {
    int result = add(3, 5);
    printf("Result: %d\n", result);
    return 0;
}

lnk2019エラーが発生した場合は、これらの原因を確認し、適切な対処を行う必要があります。

エラーメッセージやコンパイルログを確認し、問題の箇所を特定して修正することが重要です。

目次から探す