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

时间:2010-08-28 22:44:54

标签: 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;
}   

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

Error: module stdio cannot read file 'std\stdio.d'

我是否需要指定一些路径才能使标准库工作?

2 个答案:

答案 0 :(得分: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目录包含{{1}}文件。

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

答案 1 :(得分:5)

查看dmd安装目录中的~\windows\bin\sc.ini文件。它包含dmd的隐式命令行参数,对于dmd 2.048应该看起来像这样:

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

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

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