Язык программирования D: модуль stdio не может прочитать файл std \ stdio.d - PullRequest
11 голосов
/ 29 августа 2010

Я установил dmd (2.0?) С помощью установщика Windows и пытаюсь скомпилировать следующую программу:

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'
* 1006Есть ли пути, которые я должен указать, чтобы заставить работать стандартную библиотеку?

Ответы [ 2 ]

8 голосов
/ 29 августа 2010

Когда вы получаете такие ошибки, это означает, что 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.

Если оба эти метода не работают, я бы рекомендовал переустановить их с нуля.

5 голосов
/ 29 августа 2010

Посмотрите на файл ~\windows\bin\sc.ini в вашей директории установки dmd. Он содержит неявные аргументы командной строки для dmd, который должен выглядеть следующим образом для dmd 2.048:

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

и

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

Если они в порядке, и это не работает, ваша установка, вероятно, не работает. Я рекомендую вам просто скачать сжатую версию компилятора и распаковать ее поверх вашей установки.

...