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

12

我使用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'

我需要指定一些路径来使标准库正常工作吗?


请发布使用 dmd -v 编译的输出结果。 - Bernard
C:\hope\D>dmd tcpechoserver.d -v解析 tcpechoserver 全部导入 tcpechoserver 导入 object (C:\D\bin..\import\object.di) 导入 std.stdio (std\stdio.d) tcpechoserver.d(3): 错误: 模块 stdio 无法读取文件 'std\stdio.d' - lowerkey
2个回答

8
当你遇到这样的错误时,意味着DMD无法找到导入文件。如果你import foo.bar.xyz,那么它期望在一些目录foo\bar\中找到一个xyz.d

它会在所有标准导入路径以及当前目录中搜索此目录(例如,如果您在tcpechoserver.d旁边添加了一个名为std的目录,并在其中放置了一个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文件。

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


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"
如果它们没有问题,但仍然无法正常工作,则可能是您的安装已损坏。我建议您只需下载编译器的压缩版本并解压缩到您的安装位置即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接