interop – 在与C-version SDL2链接时从D隐藏控制台

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

在C中,答案很简单:将链接器SubSystem更改为Windows;然后SDL完成其余的工作.它有一个宏,它将你的main重新定义为SDL_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库的源代码,以及发现here的C-API SDL2和SDL2main项目.我编译并链接到所有三个结果库 – – 废弃和SDL2main是静态的,SDL2是动态的.我不太倾向于说这个设置是责备,因为它可以正常工作,保存不朽的控制台窗口.

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

点赞