unresolved external symbol—困扰我多年的问题
照着书上写了一段最简单的hello程序,在Visual C++ 6.0下,编译成功,连接时却出现如下错误:Linking...
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
Debug/Hello.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.Hello.exe - 3 error(s), 0 warning(s)n年了,都没有找到方法解决。不用生成向导,最简单的MFC程序该如何编写?能不能将所有代码均放在一个源文件,而不采用其它源文件和自定义的头文件?每每我这样做了,便会出现上述错误。救救我!
以下是hello程序的源码:#include <afxwin.h>class CHelloFrame:public CFrameWnd
{
public:
CHelloFrame()
{Create(NULL,"Hello World!",WS_OVERLAPPEDWINDOW,rectDefault);}
};class CHelloApp:public CWinApp
{
public:
virtual BOOL InitInstance();
};BOOL CHelloApp::InitInstance()
{
m_pMainWnd=new CHelloFrame();
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}CHelloApp HelloApp;

解决方案 »

  1.   

    修改编译器选项~
    VC默认的是/system:console
    改成window~
      

  2.   

    你使用了单线程的函数库,所以找不到thread相关函数。
    修改编译选项:
    C/C++/Category选Code Generation,Use run-time library选MultiThreaded或Debug MultiThreaded就OK了或直接改编译选项
    如果有/ML就改成/MT
    如果有/MLd 就改成/MTd
      

  3.   

    如果你创建了Console工程,VC缺省的设置是使用单线程库的,所以会出现此类问题。改成多线程就OK了。
    不同线程模式的连接库是不同的,可以参考MSDN中关于/MD, /ML, /MT, /LD   等编译选项的说明。
    不同线程模式的函数库是不能同时使用的,因为这些库都定义了许多同名的函数。如果你的程序编译中出现了某些Ansi C系统函数重复定义或类似的错误,就可能跟线程模式有关了。我这也是经验之谈,出过这样的错误。
      

  4.   

    我也遇到过这样的问题:
    当时是W32程序加载mfc的类,
    我的解决办法是:
    project/setting
    在Microsoft foundation classes中选中
    Use Mfc in a static  class希望对你有帮助!!