【问题标题】:How to not open a console when starting program written in D启动用D编写的程序时如何不打开控制台
【发布时间】: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


【解决方案1】:

你需要添加

"lflags": ["-Subsystem:Windows"]

到您的dub.json 文件,告诉 ldc 创建一个 Window UI 二进制文件。要使用的命令行选项是ldc2 -L=-Subsystem:Windows

【讨论】:

  • 现在当我编译我的程序时,链接器失败并显示:libcmt.lib(exe_winmain.obj):错误 LNK2019:未解析的外部符号 _WinMain@16 在函数“int __cdecl __scrt_common_main_seh(void)”中引用( ?__scrt_common_main_seh@@YAHXZ)
  • 解决方案显然是添加 winmain 入口点,但正如 forum.dlang.org/post/atzfdxpbpzzbidjdrjtg@forum.dlang.org 中所述,d 运行时未初始化。
  • 从 dlang win32 示例页面(在 dlang 论坛帖子中引用)复制代码,有效。 d 运行时显然也可以在这里工作,所以问题以某种方式解决了。不漂亮,但这就是windows....感谢您的帮助! (你的旗帜成功了)
  • 在带有 MS 链接器的 64 位 Windows 上,命令行是:-L/subsystem:windows -L/entry:mainCRTStartup 使用 D main 而不使用控制台。只需将那个条目翻译成 ldc+dub 的语法,你就明白了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 2017-03-08
  • 2012-01-11
  • 1970-01-01
相关资源
最近更新 更多