error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup


編譯一段程序時,出現連接器錯誤:

error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup

 

該程序大致如下:

 

VisualStudio 10.0

properies | general | character set : "Use Unicode Character Set"

properies | linker | system : "Console (SUBSYSTEM:CONSOLE)"

 

namespace mystock
{

const int .....;
const wchar_t* const .....;
class .......{};
class .......{};
.......

int _cdecl wmain(int argc, wchar_t* argv[])
{
    ......;
    ......;
}

} // namespace mystock

為什么?我的main函數看起來沒錯啊?

 

對於CRT在什么情況下會要求什么樣的main函數,相信讀者很清楚。可這次的問題從未遇到過。

 

干想了二十分鍾,終於想起來了。或者說是蒙對了,其實心里仍然不很清楚。

我注意到了連接器想要的是“_main”,為什么有“_”?即使是向導生成的_tmain,在宏展開后也是main或者wmain啊?

 

自動加下划線,不是C編譯器對cdecl的修飾規則嗎?對了,難道是因為我把wmain放到一個namespace里,就怎么怎么着了?

 

那就咬牙試一試:

extern "C" int _cdecl wmain(int argc, wchar_t* argv[]){ ......

 

連接器錯誤消失。

 

如果讀者你,恰好也遇到類似問題,希望這篇文章有所幫助。

如果你知道的更詳細,請回復指導:

1,為什么main函數放到namespace里就必須要extern "C"了?

2,main不放到namespace里,但是在.cpp文件里,在編譯器默認設置的情況下,難道就是extern "C"了?不應該啊。


免責聲明!

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



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