1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Posted at

はじめに

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

  • 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を使用しているが初めて知る
本当に自分の知識とは些細なものであることを実感

1
0
0

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
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?