"LNK2019: 未解決の外部シンボル __imp__MessageBoxExA@20 が関数 _main で参照されました。" に関する原因と対処

このコンパイルエラーの原因と対処に関して説明します。

スポンサード リンク

Microsoft Visual C++にて以下のソースでコンパイルエラーが発生します:

コンパイルエラーメッセージ:
error LNK2019: 未解決の外部シンボル __imp__MessageBoxExA@20 が関数 _main で参照されました。xxxxxxxx.exe : fatal error LNK1120: 外部参照 1 が未解決です。

ソース(バグ有り):

#include "StdAfx.h"
#include "windows.h"

int main()
{
LPTSTR lpBuffer = NULL;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL, GetLastError(),
LANG_USER_DEFAULT,
(LPTSTR)&lpBuffer, 0, NULL );
MessageBoxEx(NULL, lpBuffer, "直前のエラーメッセージ", MB_OK,0);
LocalFree(lpBuffer); } //誤ったコンパイル方法 //cl test.cpp user32.lib


原因:
コンパイルは成功しましたが、リンク時にMessageBoxEx関数が見つかりませんでした。

対処:
コンパイル時に user32.lib をリンクします。
例: cl test.cpp user32.lib
MSVCなどの開発ツールで作成したプロジェクトならデフォルトでリンクされるのでこのような指定は不要となります。


ソース(修正済み):

#include "StdAfx.h"
#include "windows.h"

int main()
{
LPTSTR lpBuffer = NULL;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL, GetLastError(),
LANG_USER_DEFAULT,
(LPTSTR)&lpBuffer, 0, NULL );
MessageBoxEx(NULL, lpBuffer, "直前のエラーメッセージ", MB_OK,0);
LocalFree(lpBuffer); } //正しいコンパイル方法 //cl test.cpp user32.lib

スポンサード リンク



[コンパイルエラーコード、メッセージに戻る]