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 としてコンパイルしようとしたりすると発生するようです。
私の質問です。なぜこれが起こっているのか知りたいのですが、このアプローチの代わりに何をすることをお勧めしますか?