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.dあるディレクトリでa を見つけることを期待しますfoo\bar\

現在のディレクトリだけでなく、すべての標準インポート パスでこのディレクトリを検索します (たとえば、ディレクトリstdの隣にa を含むディレクトリを追加するtcpechoserver.dstdio.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の暗黙のコマンドライン引数が含まれています。これは、dmd2.048の場合は次のようになります。

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

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

それらに問題がなく、機能しない場合は、インストールが壊れている可能性があります。コンパイラのzipバージョンをダウンロードして、インストール時に解凍することをお勧めします。

于 2010-08-29T08:28:16.423 に答える