[轉]無法解析的外部符號 _main,該符號在函數 ___tmainCRTStartup 中被引用


剛學WinAPI編譯遇到不少問題,
LNK2019: 無法解析的外部符號 _main,該符號在函數 ___tmainCRTStartup 中被引用 MSVCRTD.lib test。

這個問題表明你新建的是一個main類型函數(控制台程序),而你的程序中有窗口程序,顯然是個win32函數,解決方法:項目-屬性-鏈接器-系統-子系統-把控制台該為windows。


以下基本的情況說明:

一,問題描述
error LNK2001: unresolved external symbol _WinMain@16
debug/main.exe:fatal error LNK 1120:1 unresolved externals
error executing link.exe;

二,產生這個問題可能的原因
1, 你用vc建了一個控制台程序,它的入口函數應該是main, 而你使用了WinMain.

2. 你用vc打開了一個.c/.cpp 文件,然后直接編譯這個文件,這個文件中使用了WinMian而不是main作為入口函數。vc這時的默認設置是針對控制台程序的。

三, 解決方法
1.進入project->setting->c/c++, 在category中選擇preprocessor,在processor definitions中刪除_CONSOLE, 添加_WINDOWS

2.進入project->setting->Link, 在Project options中將 /subsystem:console改為/subsystem:windows.

3.保存設置,Rebuild All.

VS2005中的設置請參考對應項進行設置

四,VS2005中的設置

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

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

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

4.Rebuild All. Ok ?

測試:(環境:vs2005,編程語言vc)

1.用文本編輯器編寫如下代碼:

// test.c
#include <windows.h>

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
  MessageBox(NULL, "Hello!", "title", MB_OK);
}

假設把文件包存為test.c.

2.用vs2005建一個Win32 Console Application, 注意在Application Settings設置為Empty project. 然后把test.c添加到工程中去。

3.vs2005 建立的工程默認是支持UNICODE的,我不用這個,所以在菜單中選擇 Project->Properties, 彈出Property Pages窗口。在左邊欄中依次選擇:Configuration Properties->General,然后把右邊欄的Character Set 改為Use Multi-Byte Character Set.

4.編譯,出現如下錯誤:

MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
C:\test\Debug\test.exe : fatal error LNK1120: 1 unresolved externals

5.按照上述VS2005中的設置方法進行設置,然后再編譯,錯誤消失了吧!

 

同理,如果你新建的是一個Windows 32程序,但是卻使用了控制台程序的入口函數:void main(){ }。可按照下圖所示對應修改程序類型。


免責聲明!

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



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