C言語のエラー LNK1120: 外部参照

このQ&Aのポイント
  • C言語のプログラムでLNK1120エラーが発生する場合の問題解決方法について調査しました。
  • ネットで調べ、ファイルの形式をWIN32コンソールアプリケーションに変えても、エラーが取れませんでした。
  • VC++の2010を使っている場合、LNK1120エラーの対処方法があるか質問しました。
回答を見る
  • ベストアンサー

C言語のエラー LNK1120: 外部参照

#include "myhelper.h" #include "mymain_4.h" //自キャラのデータ Point2D g_jikipos = {40, 400}; //画像ハンドル int g_jikiimage[11]; //色々なファイルの読み込み int LoadFiles() { //画像ファイルの読み込み if (LoadDivGraph("media\\player01.bmp", 11, 11, 1, 64, 64, g_jikiimage) == -1) return -1; return 1; } .obj : error  LNK2019: 未解決の外部シンボル (?MyMain_4@@YAXXZ) が関数 _WinMain@16 で参照されました。   error LNK1120: 外部参照 1 が未解決です。      .exeファイル この記述の時、こういったエラーに見舞われます。 プログラムの記述でしょうか? ネットで調べ、ファイルの形式をWIN32コンソールアプリケーションに変えても、 エラーが取れませんでした。   何か方法があればと思い質問します。  VC++の2010を使っています。

noname#140100
noname#140100

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

C/C++では、最後にobjファイルをまとめてDLLやEXEにする「リンク」という作業があり、このときに、各ファイルやライブラリにちらばっている関数や変数等の名前(シンボル)を、その 実体と結びつける作業を行います。 このとき、その結びつけるべき相手が無いのときに出るのがこのエラーです。 > .obj : error  LNK2019: 未解決の外部シンボル (?MyMain_4@@YAXXZ) が関数 _WinMain@16 で参照されました。 とあるように、 MyMain_4という関数が、宣言だけされていて、その実体が無いのがエラーの原因です。 C++の場合、多重定義というのがあって、同じ関数名でも、引数が違うと別の関数とみなされます。 例えば、 mymain_4.hの中で 「MyMain_4(int)」と宣言していて、実際の定義(命名から想像するとmymain_4.cppの中?)では「My_main_4(char)」が定義されてる、とか、そういう間違いは無いですか?

noname#140100
質問者

お礼

私にも、大変わかりやすい回答で有り難うござます。 試してみて解決し、なんとなく理解も出来ました。 参考書を見ながら勉強していまして、 mymain_4を宣言しておき内容を書き込んでいませんでした。 内容を記述することにより解決できました。 本当に有り難うございます。 勉強頑張ります。

関連するQ&A

  • LNK1120 エラーについて

    このエラーが出たら一体何が問題なんですか? このエラーが出た以降、Visual C++ 2008がずっと使えなくなってしまいました…。ちなみ、この時にビルドで出力されたのは SVCRTD.lib(crtexew.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。 ■■■\Debug\tr3.exe : fatal error LNK1120: 外部参照 1 が未解決です。 …でした。 あと、入力したものは普通に #include <stdio.h> void main(){ printf ("Hello World"); } です

  • C++でのエラー LNK2001

    C++でプログラミング中ビルドしたところ以下のようなエラーが出ました。解決方法がわかりません。どのようにしたら解決できるのでしょうか? ---------------------------------------------------------------- コンパイル中... sample01.cpp リンク中... sample01.obj : error LNK2001: 外部シンボル "__imp__dispose_library" は未解決です sample01.obj : error LNK2001: 外部シンボル "__imp__get_copyright_information" は未解決です sample01.obj : error LNK2001: 外部シンボル "__imp__get_version_information" は未解決です sample01.obj : error LNK2001: 外部シンボル "__imp__initialize_library" は未解決です sample01.obj : error LNK2001: 外部シンボル "__imp__close_reader_writer" は未解決です sample01.obj : error LNK2001: 外部シンボル "__imp__get_last_error_types" は未解決です Debug/Sample01.exe : fatal error LNK1120: 外部参照 6 が未解決です。 link.exe の実行エラー

  • C++で、外部シンボル・外部参照が未解決

    どんな簡単な間違っていないようなプログラムをビルドしても、同じエラーメッセージが現れてきます。 これは、もしかしてインストールの仕方がまずかったのでしょうか? LIBCD.lib(wincrt0.obj) : error LNK2001: 外部シンボル "_WinMain@16" は未解決です Debug/hello.exe : fatal error LNK1120: 外部参照 1 が未解決です。 link.exe の実行エラー hello.exe - エラー 2、警告 0

  • Win32APIについて

    #include <windows.h> int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int showCmd) { return 0; } のようなプログラムをビルドすると LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です Debug/Cpp1.exe : fatal error LNK1120: 外部参照 1 が未解決です。 が出ます。 ちなみにコンパイル環境はMicrosoft Visual C++ 5.0です。

  • Visual C++ 2005 Express EditionでLINK2019エラー

    Visual C++ 2003.netからVisual C++ 2005 Express Editionに移行した際に、以前書いたプログラムがリンクエラーで動かなくなってしまいました。 追加するLibディレクトリが足りないのかと思ったのですが、何が足りないのか見つけることができませんでした。 解決法を教えていただけないでしょうか。 OSはWindows XPです。 よろしくお願いします。 エラーメッセージの内容↓ ------------------------------- error LNK2019: 未解決の外部シンボル __imp__GetWindowPlacement@8 が関数 _WinMain@16 で参照されました。 error LNK2019: 未解決の外部シンボル __imp__DispatchMessageA@4 が関数 _WinMain@16 で参照されました。 error LNK2019: 未解決の外部シンボル __imp__TranslateMessage@4 が関数 _WinMain@16 で参照されました。 error LNK2019: 未解決の外部シンボル __imp__PeekMessageA@20 が関数 _WinMain@16 で参照されました。 error LNK2019: 未解決の外部シンボル __imp__ValidateRect@8 が関数 _WinMain@16 で参照されました。 error LNK2019: 未解決の外部シンボル __imp__ShowWindow@8 が関数 _WinMain@16 で参照されました。 error LNK2019: 未解決の外部シンボル __imp__SetWindowPos@28 が関数 _WinMain@16 で参照されました。 error LNK2019: 未解決の外部シンボル __imp__GetWindowRect@8 が関数 _WinMain@16 で参照されました。 error LNK2019: 未解決の外部シンボル __imp__GetClientRect@8 が関数 _WinMain@16 で参照されました。 error LNK2019: 未解決の外部シンボル __imp__CreateWindowExA@48 が関数 _WinMain@16 で参照されました。 error LNK2019: 未解決の外部シンボル __imp__GetSystemMetrics@4 が関数 _WinMain@16 で参照されました。 error LNK2019: 未解決の外部シンボル __imp__RegisterClassExA@4 が関数 _WinMain@16 で参照されました。 error LNK2019: 未解決の外部シンボル __imp__LoadCursorA@8 が関数 _WinMain@16 で参照されました。 error LNK2019: 未解決の外部シンボル __imp__DefWindowProcA@16 が関数 "long __stdcall WindowProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WindowProc@@YGJPAUHWND__@@IIJ@Z) で参照されました。 error LNK2019: 未解決の外部シンボル __imp__PostQuitMessage@4 が関数 "long __stdcall WindowProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WindowProc@@YGJPAUHWND__@@IIJ@Z) で参照されました。 現在追加されているLibディレクトリ↓ ------------------------------------------- $(VCInstallDir)lib $(VCInstallDir)PlatformSDK\lib $(FrameworkSDKDir)lib $(VSInstallDir) $(VSInstallDir)lib C:\Program Files\Microsoft Platform SDK\Lib C:\Program Files\Microsoft DirectX SDK (April 2007)\Lib\x86

  • C言語のPathFileExistsについて

    visual studio 2010、C言語でPathFileExistsを使って ファイル有無のチェックをしようと試みましたが、 コンパイルエラーになってしまいました。 環境はwindowsXP、SP3です。 参考にしたいくつかのサイトでは、visual studio 2010ではPathFileExistsを使って ファイル有無をチェックできると書いてあったのですが、 visual studio 2010でもC言語だとPathFileExistsは使えないのでしょうか? TEST.C #include <stdio.h> #include <shlwapi.h> int main() {   char path[128];   sprintf( path, "c:\\tmp.txt" );   if ( PathFileExists(path) ){     printf("ファイル有\n");   }   else{     printf("ファイル無\n");   }   return 0; } TEST.OBJ : error LNK2019: 未解決の外部シンボル __imp__PathFileExistsA@4 が関数 _ main で参照されました。 TEST.EXE : fatal error LNK1120: 外部参照 1 が未解決です。 NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 10.0\VC\BI N\link.exe"' : リターン コード '0x460' Stop.

  • 外部シンボル未解決 LNK2001

    外部シンボル未解決 LNK2001 今windowsXP32bitからwindowsXP64bitPCでのデバッグを行おうとしています。 開発環境VC++2005です。 しかし、32bitPCでは、エラーなどなかったのですが64bitPCだと次のようなエラーが発生しました。 5>DirectPlay.obj : error LNK2001: 外部シンボル "CLSID_DP8SP_TCPIP" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "CLSID_DirectPlay8Address" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "IID_IDirectPlay8Address" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "CLSID_DirectPlay8Client" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "IID_IDirectPlay8Client" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "DSDEVID_DefaultCapture" は未解決です。 5>MainteDlg.obj : error LNK2001: 外部シンボル "DSDEVID_DefaultCapture" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "DSDEVID_DefaultPlayback" は未解決です。 5>MainteDlg.obj : error LNK2001: 外部シンボル "DSDEVID_DefaultPlayback" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "CLSID_DirectPlayVoiceClient" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "IID_IDirectPlayVoiceClient" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "PIN_CATEGORY_PREVIEW" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "IID_IBasicVideo" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "CLSID_VideoInputDeviceCategory" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "CLSID_SystemDeviceEnum" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "IID_ICreateDevEnum" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "IID_IMediaControl" は未解決です。 とエラーがでています。 一応構成マネージャーの設定は、64x設定しています 何か設定などたりないのでしょうか? よろしくお願いします。

  • C言語でレジストリ取得「未解決の外部シンボル」

    C言語でレジストリを取得する時に「未解決の外部シンボル」エラー レジストリを取得したくて、下記のコードで実行したら、 ====================================================================== #include <stdlib.h> #include <stdio.h> #include <windows.h> #include <shlwapi.h> int main(void) { char Value[1000]; DWORD ValueSize; char *DefaultValue = ""; ValueSize = 1000; /* HKEY_LOCAL_MACHINEのSoftware\masapicoというキーにあるfooという名前のレジストリ値を取得 */ SHRegGetUSValue( "Software\masapico", "foo", NULL, Value, &ValueSize, FALSE, DefaultValue, lstrlen(DefaultValue) + 1); /* 結果を表示 */ printf("%s\n", Value); return 0; } ====================================================================== こういうエラーが出ます。 1>コンパイルしています... 1>testExe.cpp 1>リンクしています... 1>testExe.obj : error LNK2019: 未解決の外部シンボル _SHRegGetUSValueA@32 が関数 _main で参照されました。 1>I:\testExe\Debug\testExe.exe : fatal error LNK1120: 外部参照 1 が未解決です。 いろいろ調べましたが原因はわからず困っています。 Javaはある程度やってましたが、Cに関しては初心者です。 環境は Win7 64bitです。 WinXPの環境でコンパイルしても同じ現象です。 その時のエラーは error LNK2019: 未解決の外部シンボル _SHRegGetUSValue が関数 _main で参照されました。

  • C、C++言語(Detours)についての質問

    Detoursを用いて、下記のWebサイト通りに試したのですが、エラーが出てAPIフックができません。(前準備までは下記の通りで成功しました) http://asd.if.land.to/code/apihook7.html 環境は、Windows7 proffesional 32bit版です。Visual Studio 2008を使っております。 プロジェクトはWin32コンソールアプリケーションで作成しており、アプリケーションの種類は、Windows アプリケーションを選択しております。 プロジェクトのディレクトリに登録したのは、 $(ProgramFiles)\Microsoft Research\Detours Express 3.0\include $(ProgramFiles)\Microsoft Research\Detours Express 3.0\lib.X86 $(ProgramFiles)\Microsoft Research\Detours Express 3.0\bin.X86 Webに記載されている通りにソースコードを書いてコンパイルするとこのようなエラーがでました。 1>test.obj : error LNK2019: 未解決の外部シンボル _DetourTransactionCommit@0 が関数 _wWinMain@16 で参照されました。 1>test.obj : error LNK2019: 未解決の外部シンボル _DetourAttach@8 が関数 _wWinMain@16 で参照されました。 1>test.obj : error LNK2019: 未解決の外部シンボル _DetourUpdateThread@4 が関数 _wWinMain@16 で参照されました。 1>test.obj : error LNK2019: 未解決の外部シンボル _DetourTransactionBegin@0 が関数 _wWinMain@16 で参照されました。 1> test.obj : error LNK2019: 未解決の外部シンボル _DetourRestoreAfterWith@0 が関数 _wWinMain@16 で参照されました。 Detoursを用いたAPIフックの勉強中のためご教授願います。このサイトを参考にして、APIフックできた方がいましたら書き込みよろしくお願いします。 ソースコード test.cpp #include <windows.h> #include <tchar.h> #include <detours.h> // MessageBoxA INT ( WINAPI *RealMessageBoxA )( HWND, LPCSTR, LPCSTR, UINT ) = MessageBoxA; INT WINAPI DetoursMessageBoxA( HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType ) { return RealMessageBoxA( hWnd, lpText, "hook", uType ); } // GetModuleFileNameA DWORD ( WINAPI *RealGetModuleFileNameA )( HMODULE, LPSTR, DWORD ) = GetModuleFileNameA; DWORD WINAPI DetoursGetModuleFileNameA( HMODULE hModule, LPSTR lpFilename, DWORD nSize ) { //RealGetModuleFileNameA( hModule, lpFilename, nSize ); ::lstrcpyA( lpFilename, "hook" ); return 4; // 文字数を返す } INT APIENTRY _tWinMain( HINSTANCE, HINSTANCE, LPTSTR, INT ) { // フック ::DetourRestoreAfterWith(); if ( ::DetourTransactionBegin() != NO_ERROR ) return 0; if ( ::DetourUpdateThread( GetCurrentThread() ) != NO_ERROR ) return 0; ::DetourAttach( (PVOID*)&RealMessageBoxA, DetoursMessageBoxA ); ::DetourAttach( (PVOID*)&RealGetModuleFileNameA, DetoursGetModuleFileNameA ); ::DetourTransactionCommit(); // テスト CHAR szPath[ MAX_PATH + 1 ]; ::GetModuleFileNameA( NULL, szPath, MAX_PATH ); ::MessageBoxA( NULL, szPath, "exeのパスを表示", MB_OK ); return 1; } それでは、よろしくお願いします。

  • 未解決の外部シンボル

    C言語は少しやっていたことがあり このたび、Winapiをしてみようと はじめました。 参考に見つけてきたプログラム #include <windows.h> #include <tchar.h> int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int showCmd) { MessageBox( NULL, _T("Hello World"), _T("メッセージ"), MB_OK ); return 0; } をコンパイルしようとしたところ error LNK2019:未解決のシンボル __imp__MessageBoxA@16が関数_WinMain@16で 参照されました。 fatal errorLNK1120:外部1が未解決です。 と出てきます。 どうすればいいのでしょうか・・・ 困っています誰か助けてください Windows XP SP3 Visual Studio C++ 2008 Express Edition