LoginSignup
0

posted at

Qtのプロジェクトでビルド時にWinMainのリンクエラーが出た場合

はじめに

この記事は次の方がターゲット

  • qmake を使っている方
  • Windowsで開発をしている方
  • なぜかリンク時にWinMainのリンクエラーが出てしまった方

経緯

Qt5.12 迄ではSUBSYSTEMが Windows の場合でも main関数で問題なく qmake で生成したMakefileでビルドできていたが Qt6.5 に移行してからビルド時に WinMain のリンクエラーが発生する様になってしまった
※ プロジェクトによっては今まで通りリンクエラーにならない
※ もしかしたらリンクするライブラリの関係かも

対応

次の対応で問題なさそう

  • .pro ファイルへの記述
.pro
contains(CONFIG, console) {
  DEFINES += SUBSYSTEM_CONSOLE
}
  • main.cpp ファイルへの記述
main.cpp
#include <QtWidgets>

#ifdef SUBSYSTEM_CONSOLE
int main(int argv, char *argv[])
#else
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
#endif
{
#ifdef SUBSYSTEM_CONSOLE
    QApplication app(argc, argv);
#else
	QApplication app(__argc, __argv);
	Q_UNUSED(hInstance);
	Q_UNUSED(hPrevInstance);
	Q_UNUSED(lpCmdLine);
	Q_UNUSED(nCmdShow);
#endif

	app.setApplicationDisplayName(app.tr("app name"));
    QWidget w;

    app.connect(&app, &Application::lastWindowClosed, &app, &Application::quit);
    w.show();
    return app.exec();
}

__argc__argv は MSVCコンパイラの独自の拡張機能 との事

おわりに

Qtのプロジェクトでも WinMain をエントリーポイントで書けることを10数年Qtを使用しているが初めて知る
本当に自分の知識とは些細なものであることを実感

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0