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


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

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


9321
2017-08-28 22:44


起源

请发布编译输出 dmd -v。 - Bernard
C:\ hope \ D> dmd tcpechoserver.d -v parse tcpechoserver importall tcpechoserver import object(C:\ D \ bin \ .. \ import \ object.di)import std.stdio(std \ stdio.d)tcpechoserver.d (3):错误:模块stdio无法读取文件'std \ stdio.d' - lowerkey


答案:


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

LIB = “@%P%\ .. \ lib中”; \ DM \ lib中

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

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


5
2017-08-29 08:28





当你遇到这样的错误时,就意味着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 文件。

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


8
2017-08-29 09:57