Я занимаюсь разработкой приложения для 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
, а затем я вызываю wi.init с предоставленными аргументами WinMain, чтобы сделать все остальное.
Я думал, что я умный, но при компиляции я получаю ошибку:
MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
Я исследовал эту ошибку, и она возникает, когда люди либо забывают основной метод, либо пытаются скомпилировать DLL как .exe
Так что на мой вопрос; Мне интересно, почему это происходит, и что вы рекомендуете делать вместо этого подхода?