編譯一段程序時,出現連接器錯誤:
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)"
[cpp]
namespace mystock
{
const int .....;
const wchar_t* const .....;
class .......{};
class .......{};
.......
int _cdecl wmain(int argc, wchar_t* argv[])
{
......;
......;
}
} // namespace mystock
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"了?不應該啊。