我可以从命令行构建MFC应用程序吗?

时间:2012-10-11 01:46:35

标签: c++ visual-c++ mfc

我拥有所有必需的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&gt; Bin \ cl.exe hellomfc.cpp / EHsc / I   atlmfc \ include / I Includes / I Includes \ Winsdk   atlmfc \ lib \ amd64 \ nafxcw.lib Libs \ libcmt.lib Libs \ Ke rnel32.Lib   Libs \ User32.Lib Libs \ Gdi32.Lib Libs \ MSImg32.Lib Libs \ ComDlg32.Lib Lib   s \ 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.L ib   利布斯\ Urlmon.Lib

编译器响应抱怨__tmainCRTStartup未找到。以及关于_WIN32_WINNT没有定义的其他一些事情,虽然这似乎只是一个警告,而不是一个错误。

以下是我通过它运行构建命令后cl.exe的完整响应:

  

Microsoft(R)C / C ++优化编译器版本16.00.30319.01 for x64   版权所有(C)Microsoft Corporation。保留所有权利。

     

hellomfc.cpp   _WIN32_WINNT未定义。默认为_WIN32_WINNT_MAXVER(请参阅WinSDKVer.h)Microsoft(R)增量链接器版本10.00.30319.01   版权所有(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:函数中未解析的外部符号main   __tmainCRTStartup hellomfc.exe:致命错误LNK1120:1个未解析的外部

所以error LNK2019: unresolved external symbol main referenced in function __tmainCRTStartup hellomfc.exe : fatal error LNK1120: 1 unresolved externals 似乎是问题所在。这个错误基本上意味着编译器找不到入口点,不是吗?如果是这样,MFC显然将其WinMain埋在框架中的某个地方。好的,我怎么链接到它?

1 个答案:

答案 0 :(得分:1)

看起来您可能没有指定正确的目标平台(Windows vs Console),而后者未被链接。

尝试在命令行上指定/ SUBSYSTEM:WINDOWS,告诉链接器使用哪个启动过程。它是一个链接器标志,因此需要通过/ link传递给链路阶段。