1. 程式人生 > >常見編譯錯誤(更新中...)

常見編譯錯誤(更新中...)

一、 無法解析的外部符號 [email protected],該符號在函式 ___tmainCRTStartup 中被引用

#include
using namespace std;
int main()
{
cout <<“This is a C++ program.”;
return 0;
}

1>------ 已啟動生成: 專案: hello1, 配置: Debug Win32 ------
1> hello1.cpp
1>MSVCRTD.lib(crtexew.obj) : error LNK2019: 無法解析的外部符號 [email protected]
,該符號在函式 ___tmainCRTStartup 中被引用 1>E:\software\hello1\Debug\hello1.exe : fatal error LNK1120: 1 個無法解析的外部命令 ========== 生成: 成功 0 個,失敗 1 個,最新 0 個,跳過 0 個 ==========

可能的原因

產生這個問題的真正原因是c語言執行時找不到適當的程式入口函式,一般情況下,如果是windows程式,那麼WinMain是入口函式,如果是dos控制檯程式,那麼main是入口函式,而如果入口函式指定不當,很顯然c語言執行時找不到配合函式,它就會報告錯誤。

你用vc建了一個控制檯程式,它的入口函式應該是main, 而你使用了WinMain.

你用vc打開了一個.c/.cpp 檔案,然後直接編譯這個檔案,這個檔案中使用了WinMian而不是main作為入口函式。vc這時的預設設定是針對控制檯程式的。根本就沒有WinMain或Main函式。

在VS中

Win32 專案中應用程式的入口函式為 WinMain (視窗應用程式的主函式).
Win32控制檯應用程式的入口函式為 main 函式,也就是普通的命令列應用程式的主函式。
所以在 Win32專案中, 沒有寫 WinMain 函式實現就會出現連結錯誤了。
同樣在 Win32 控制檯應用程式中, 沒有寫 main 函式的實現也會出現連線錯誤一樣。

解決方法

專案——> 專案屬性——> 配置屬性——> 連結器——> 系統——> 子系統

這裡選擇控制檯(SUBSYSTEM:CONSOLE) 則表示此專案是WIN32控制檯程式。

而選擇Windows (/SUBSYSTEM:WINDOWS) 則表示為 WIN32專案。