【发布时间】:2017-08-27 23:53:17
【问题描述】:
我正在用 D 语言编写一个应用程序。它是使用 ldc2 编译器编译的,使用 dub 配置(目标类型:可执行文件)。编译后的程序会创建一个控制台窗口,我不需要它,因为应用程序使用了 GUI 框架。我需要一种方法来防止创建控制台窗口。
我知道的唯一其他类似行为的例子是使用 mingw64-gcc 编译 C/C++ 程序时,它有一个 -mwindows 标志。我不知道 D 程序有什么类似的东西。配音配置和 ldc 编译器标志似乎都不能满足我的要求。有谁知道该怎么做?如果它至少可以满足我的要求,甚至另一个编译器也可以工作。
从 CMD 或 PowerShell 打开应用程序时,不会打开其他控制台。仅当我从 Windows GUI 启动应用程序时才会出现此问题。
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 入口点。 (如果你只是把入口标志放在外面就可以使用)
【问题讨论】:
-
在您的配音配置文件中,您可以添加一个
"lflags":["/subsystem:windows"]选项,它应该可以做到这一点。 ...但我不确定这是否适用于 ldc2,您可以尝试一下并告诉我吗?具体语法可能略有不同,堆栈溢出提示我也可能是"-Wl,--subsystem,windows"。 -
没有用。我试过配音 lflags[/sub..] 和 dflags -L=--subystem=windows。
标签: windows user-interface d windows-console ldc