在与C-version SDL2链接时隐藏D的控制台

时间:2016-05-03 00:21:03

标签: interop sdl linker-errors d

基本上,我在编写SDL窗口应用程序时会看到一个我不想看到的控制台窗口。

在C中,答案很简单:将链接器SubSystem更改为Windows;然后SDL完成其余的工作。它有一个宏,可以重新定义您的mainSDL_main,它会从自己隐藏的WinMain函数中调用它。只要确保你在主函数中使用参数,一切顺利。

在D中,我遇到了一些麻烦。在通过将-L/SUBSYSTEM:WINDOWS传递给链接器简单地更改子系统时,它通知我已声明main,SDL已声明WinMain,并且它不知道如何处理。我认为将签名从void main()更改为extern(C) int SDL_main(int argc, char*[] argv)可以解决问题,但是链接器说它无法找到任何D的运行时符号。可能与用C语言编写的入口点有关吗?

另一方面,我的问题可能在于我如何设置废弃。我在this repository工作,这是GitHub上所有不同的Derelict存储库的实时更新的混合。在我的VisualD解决方案中,我有三个相关项目:一个自制的Derelict项目,包含SDL2和Utilities库的源代码,以及找到的{-3}}的C-API SDL2和SDL2main项目。我编译并链接到所有三个结果库 - Derelict和SDL2main是静态的,SDL2是动态的。我不太倾向于说这个设置是罪魁祸首,因为除了不朽的控制台窗口之外它可以正常工作。

2 个答案:

答案 0 :(得分:1)

在传递给DMD的命令行中,添加链接器选项-L/SUBSYSTEM:WINDOWS

答案 1 :(得分:0)

如果您使用dub(我推荐)和gdc,请将以下内容插入dub.json文件中:

"dflags": ["-Wl,--subsystem,windows"]
相关问题