編譯一段程序時,出現連接器錯誤:
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"了?不應該啊。