2

必要なすべての MFC ライブラリがあり、それらはすべて「atlmc」というディレクトリにあります。http://social.msdn.microsoft.com/Forums/en-US/vcmfcatl/thread/c8556098-6f41-42cb-9de6-38ed24c3faf9から単純な helloworldmfc.cpp をコピーして作成しました

コードは次のとおりです。

#include <afxwin.h>

  class HelloApplication : public CWinApp
  {
  public:     
   virtual BOOL InitInstance();
  };

  HelloApplication HelloApp;

  class HelloWindow : public CFrameWnd
  {        
   CButton* m_pHelloButton;
  public:     
   HelloWindow();
  };


  BOOL HelloApplication::InitInstance()
  {        
   m_pMainWnd = new HelloWindow();       
   m_pMainWnd->ShowWindow(m_nCmdShow);      
   m_pMainWnd->UpdateWindow();      
   return TRUE;
  }


  HelloWindow::HelloWindow()
  {        
   Create(NULL,             
    "Hello World!",               
    WS_OVERLAPPEDWINDOW|WS_HSCROLL,                
    CRect(0,0,140,80));        
   m_pHelloButton = new CButton();
   m_pHelloButton->Create("Hello World!",WS_CHILD|WS_VISIBLE,CRect(20,20,120,40),this,1);
  }

リンカーが要求するすべてのライブラリファイルなどをリンクしました。それらはたくさんあります。これが私のビルドコマンドです:

C:\Users\Scruffy\Desktop\MSVC>Bin\cl.exe hellomfc.cpp /EHsc /I atlmfc\include /I includes /I includes\Winsdk atlmfc\lib\amd64\nafxcw.lib Libs\libcmt.lib Libs\ Kernel32.Lib Libs\User32.Lib Libs\Gdi32.Lib Libs\MSImg32.Lib Libs\ComDlg32.Lib Libs\WinSpool.Lib Libs\AdvAPI32.Lib Libs\Shell32.Lib Libs\ComCtl32.Lib Libs\ShLwApi .Lib Libs\Uuid.lib atlmfc\lib\amd64\atls.lib Libs\Ole32.Lib Libs\OleAut32.Lib Li bs\oldnames.lib Libs\WS2_32.Lib Libs\MsWSock.Lib Libs\OleAcc.Lib Libs\comsuppw.l ib Libs\GdiPlus.lib Libs\Imm32.Lib Libs\WinMM.Lib Libs\MsXml2.Lib Libs\OleDlg.Lib ib Libs\Urlmon.Lib

コンパイラの応答は、見つからないことについて不平を言って__tmainCRTStartupいます。_WIN32_WINNT が定義されていないことに関する他のことと同様に、それは単なる警告であり、エラーではないようです。

これは、ビルド コマンドを実行した後の cl.exe からの完全な応答です。

Microsoft (R) C/C++ 最適化コンパイラ バージョン 16.00.30319.01 for x64 Copyright (C) Microsoft Corporation. 全著作権所有。

hellomfc.cpp _WIN32_WINNT が定義されていません。デフォルトは _WIN32_WINNT_MAXVER (WinSDKVer.h を参照) Microsoft (R) Incremental Linker Version 10.00.30319.01 Copyright (C) Microsoft Corporation. 全著作権所有。

/out:hellomfc.exe hellomfc.obj atlmfc\lib\amd64\nafxcw.lib Libs\libcmt.lib Libs\Kernel32.Lib Libs\User32.Lib Libs\Gdi32.Lib Libs\MSImg32.Lib Libs\ComDlg32.Lib Libs\ WinSpool.Lib Libs\AdvAPI32.Lib Libs\Shell32.Lib Libs\ComCtl32.Lib Libs\ShLwApi.Lib Libs\Uuid.lib atlmfc\lib\amd64\atls.lib Libs\Ole32.Lib Libs\OleAut32.Lib Libs\oldnames .lib Libs\WS2_32.Lib Libs\MsWSock.Lib Libs\OleAcc.Lib Libs\comsuppw.lib Libs\GdiPlus.lib Libs\Imm32.Lib Libs\WinMM.Lib Libs\MsXml2.Lib Libs\OleDlg.Lib Libs\Urlmon .Lib libcmt.lib(crt0.obj): エラー LNK2019: 関数 __tmainCRTStartup hellomfc.exe で参照されている未解決の外部シンボル main : 致命的なエラー LNK1120: 1 つの未解決の外部

だからerror LNK2019: unresolved external symbol main referenced in function __tmainCRTStartup hellomfc.exe : fatal error LNK1120: 1 unresolved externals 問題があるようです。このエラーは基本的に、コンパイラがエントリ ポイントを見つけられないことを意味しますね。もしそうなら、MFC はフレームワークのどこかにその WinMain を埋め込んでいるようです。わかりました。どうすればリンクできますか?

4

1 に答える 1

1

正しいターゲット プラットフォーム (Windows とコンソール) を指定していない可能性があり、後者はリンクされていないようです。

コマンド ラインで /SUBSYSTEM:WINDOWS を指定して、使用するスタートアップ プロシージャをリンカーに指示してみてください。これはリンカー フラグであるため、/link を介してリンク フェーズに渡す必要があります。

于 2012-10-11T05:45:15.230 に答える