Как не открывать консоль при запуске программы, написанной на D
Я пишу приложение на D. Оно скомпилировано с помощью компилятора ldc2 с использованием конфигурации dub (тип цели: исполняемый). Скомпилированная программа создает консольное окно, которое мне не нужно, так как приложение использует графический интерфейс. Мне нужен способ предотвратить создание окна консоли.
Единственный другой пример, который я знаю с похожим поведением, - это компиляция программ на C/C++ с помощью mingw64-gcc, который имеет флаг -mwindows. Я не знаю ничего подобного для программ D. Кажется, что ни конфигурация даба, ни флаги компилятора ldc не делают то, что я хочу. Кто-нибудь знает что делать? Даже другой компилятор может работать, если он, по крайней мере, делает то, что я хочу.
Когда приложение открывается из CMD или PowerShell, дополнительная консоль не открывается. Проблема возникает только при запуске приложения из графического интерфейса Windows.
dub.json:
{
description (author etc.)
"targetType": "executable",
"platforms": [
"windows"
],
"dependencies": {
....
},
"versions" : [
....
],
"libs" : [
....
],
"dflags": [
"-m32",
"-static",
"-release"
]
}
команда компиляции:
dub run --compiler=ldc2.exe
Решение:
добавьте флаги компоновщика следующим образом в dub.json
"lflags":[
"-subsystem:windows",
"-entry:mainCRTStartup"
]
это удаляет консоль, всплывающую при запуске программы, если программа не запускается с другой консоли. он также включает обычную функцию d main (void main() и т. д.), НЕТ необходимости в точке входа winmain. (это можно использовать, если вы просто не указали флаг входа)
1 ответ
Вам нужно добавить
"lflags": ["-Subsystem:Windows"]
на ваш dub.json
файл, чтобы сказать ldc, чтобы создать двоичный файл Window UI. Параметр командной строки для использования ldc2 -L=-Subsystem:Windows
,