D编程语言:模块stdio无法读取文件std\stdio.d

low*_*key 11 d dmd

我使用Windows安装程序安装了dmd(2.0?),并尝试编译以下程序:

module tcpechoserver;

import std.stdio;

const int MAXPENDING = 5;

int main(char[][] argv)
{
    if(argv.length != 2){
        writef("Usage: %s <port>", argv[0]);
    }

    return 0;
}   
Run Code Online (Sandbox Code Playgroud)

但是我得到以下编译器错误:

Error: module stdio cannot read file 'std\stdio.d'
Run Code Online (Sandbox Code Playgroud)

是否有一些路径我必须指定才能使标准库工作?

Pet*_*der 8

当你遇到这样的错误时,这意味着DMD找不到导入文件.如果你import foo.bar.xyz,那么它希望它xyz.d在某个目录中找到它foo\bar\.

它会搜索该目录中的所有标准进口路径,以及当前目录(例如,如果添加了目录std旁边的tcpechoserver.d一个stdio.d在里面,那么它会使用).当然,你不希望这样 - 你想要标准stdio.d.

您可以通过打开文件找到它看起来的目录

C:\D\dmd2\windows\bin\sc.ini (假设您安装到默认目录).

在里面,它应该包含以下行:

DFLAGS="-I%@P%\..\..\src\phobos" "-I%@P%\..\..\src\druntime\import"

这告诉编译器在查找导入目录时搜索这些路径.如果由于某种原因(或者如果行不同)没有该行,则尝试将此行添加到sc.ini([Environment]标题下的任何位置应该这样做).

还要确保该dmd2目录包含\src\phobos\std\stdio.d文件.

如果这两个都不起作用,那么我建议从头开始重新安装.


Mic*_*ich 5

查看~\windows\bin\sc.inidmd安装目录中的文件.它包含dmd的隐式命令行参数,对于dmd 2.048应该如下所示:

LIB="%@P%\..\lib";\dm\lib

DFLAGS="-I%@P%\..\..\src\phobos" "-I%@P%\..\..\src\druntime\import"

如果它们没问题,但它不起作用,您的安装可能会被破坏.我建议您只需下载压缩版的编译器并将其解压缩到您的安装中.