如何在没有D运行时编译D应用程序?

kbz*_*bie 7 d dmd druntime

我一直在努力想象这一个,并开始惹恼我.我理解D运行时库.它是什么,它做了什么.我也明白你可以在没有它的情况下编译D app.就像XoMB那样.好吧,XoMB定义了自己的运行时,但有些情况下你不需要编写自己的运行时,如果你不需要它.据我所知,即使用它的DigitalMars D编译器(dmd)在运行时的幕后做了很多事情,比如根据你的程序需要发出对某些东西的引用.而且,每个程序的东西.所以你必须自己定义.我决定尝试,试着弄清楚自己并且相当远.我的意思是让链接器吐出越来越少的错误.对于测试我只想编译一个完整的裸机应用程序,只是为了在没有运行时的情况下工作.或者尽可能少运行时.这是我有我的单一源文件.

module main;

void _main()
{
    int a = 2 + 3;
}
Run Code Online (Sandbox Code Playgroud)

我编译:dmd -c main.d -defaultlib =

然后链接:link main.obj

这是我得到的错误:OPTLINK:警告23:没有堆栈和OPTLINK:警告134:没有起始地址

你可以看到我试着chaingng main来_main来摆脱无起始地址错误,但是,无论如何,没有帮助.我需要做些什么来解决这两个最后的错误?如果我可以让它工作,我想我可以查找我需要实现什么来获得更多的功能.但是,如果有人愿意帮助我解决这个问题,那就太过分了!

小智 7

module main;
extern(C) __gshared void* _Dmodule_ref;
extern(C) int main() {
    int a = 2 + 3;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 但是,当您使用更多D函数时,您将需要越来越多地增加运行时.这意味着更多的声明也http://arsdnet.net/dcode/minimal.d显示一个最小化的一个......但没有结构,没有阶级,等这个zip文件显示一个稍微完整IMPL:HTTP:// arsdnet.net/dcode/minimal.zip但语言仍然不完整.(注意:这些是用Linux编写的,可能在其他地方不起作用) (5认同)