我正在Windows上开发一个应用程序,但我也想支持其他平台(我编写的大部分代码都是独立于平台的)。无论如何,我想发展的缘故,我想保持简单(也许我在这种方法中很天真)所以我的main.cpp
看起来有点像下面这样:
#ifdef _WIN32
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR cmdLine,
int cmdShow)
#else
int main(int argc, char* argv[])
#endif
{
/* If the application is launched under Windows */
#ifdef _WIN32
win_init wi;
return wi.init(hInstance, hPrevInstance, cmdLine, cmdShow);
#endif
/* If the application is launched under OS X */
#ifdef __APPLE__
osx_init oi;
return oi.init();
#endif
}
所以我的想法是,如果应用程序在Windows下启动,则会调用WinMain
,然后使用提供的WinMain参数调用wi.init来完成剩下的工作。
我以为我很聪明,但是当我编译时,我得到一个错误:
MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
我已经研究过这个错误,当人们忘记主要方法或尝试将DLL编译为.exe
时,似乎会发生这种情况。所以我的问题;我很好奇为什么会这样,你建议我做什么而不是这种方法?
答案 0 :(得分:2)
您希望使用/SUBSYSTEM:WINDOWS
链接器选项,以便使用WinMain
。