libcmtd.lib(exe_main.obj) : error LNK2019: 無法解析的外部符號


用c++編寫第一個mfc程序的時候,照着例子輸入的代碼,執行不了,VS2017

問題描述:

MSVCRTD.lib(exe_winmain.obj) : error LNK2019: 無法解析的外部符號 WinMain,該符號在函數 "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) 中被引用
CamShift.exe : fatal error LNK1120: 1 個無法解析的外部命令

主要原因是用空項目建的,所以有些地方要改下

以下是項目代碼

1、新建空項目

2、添加頭文件及源文件,頭文件代碼如下

#pragma once
#include <afxwin.h>

class MyApp:public CWinApp
{
public:
    BOOL InitInstance() 
    {
        //create the frame of the window
        CFrameWnd *f = new CFrameWnd();

        this->m_pMainWnd = f;

        //create window
        f->Create(NULL, TEXT("hello mfc"));
        f->ShowWindow(SW_SHOW);
        return true;
    }
};

3、源文件代碼如下

#include "hello.h"

MyApp app;

4、右鍵工程名選擇->Properties, 彈出Property Pages窗口

 

 

以下是解決這個問題的方法:

1、右鍵工程名打開屬性頁

2、第二步:Configuration Properties->C/C++->Preprocessor,然后在右邊欄的Preprocessor Definitions對應的項中刪除_CONSOLE, 添加_WINDOWS.因為是空項目建的,所以沒有_CONSOLE項,添加_WINDOWS項即可

以及Configuration Properties->Linker->System,然后在右邊欄的SubSystem對應的項改為Windows(/SUBSYSTEM:WINDOWS)

 

一般情況下,如果是windows程序,那么WinMain是入口函數,在VS2017中新建項目為“win32項目”

如果是dos控制台程序,那么main是入口函數,在VS2017中新建項目為“win32控制台應用程序”

而如果入口函數指定不當,很顯然c語言運行時找不到配合函數,它就會報告錯誤。

修改設置適應你的需求

如果是windows程序:

1.菜單中選擇 Project->Properties, 彈出Property Pages窗口

2.在左邊欄中依次選擇:Configuration Properties->C/C++->Preprocessor,然后在右邊欄的Preprocessor Definitions對應的項中刪除_CONSOLE, 添加_WINDOWS.

3.在左邊欄中依次選擇:Configuration Properties->Linker->System,然后在右邊欄的SubSystem對應的項改為Windows(/SUBSYSTEM:WINDOWS)

如果是控制台程序:

1.菜單中選擇 Project->Properties, 彈出Property Pages窗口

2.在左邊欄中依次選擇:Configuration Properties->C/C++->Preprocessor,然后在右邊欄的Preprocessor Definitions對應的項中刪除_WINDOWS, 添加_CONSOLE.

3.在左邊欄中依次選擇:Configuration Properties->Linker->System,然后在右邊欄的SubSystem對應的項改為CONSOLE(/SUBSYSTEM:CONSOLE)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM