我拥有所有必需的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埋在框架中的某个地方。好的,我怎么链接到它?
答案 0 :(得分:1)
看起来您可能没有指定正确的目标平台(Windows vs Console),而后者未被链接。
尝试在命令行上指定/ SUBSYSTEM:WINDOWS,告诉链接器使用哪个启动过程。它是一个链接器标志,因此需要通过/ link传递给链路阶段。