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'

为了让标准库工作,我必须指定一些路径吗?

4

2 回答 2

8

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

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

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

于 2010-08-29T09:57:52.870 回答
5

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

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

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

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

于 2010-08-29T08:28:16.423 回答