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

Я установил 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'

Есть ли какие-то пути, которые я должен указать, чтобы стандартная библиотека работала?


d dmd
person lowerkey    schedule 28.08.2010    source источник
comment
Пожалуйста, опубликуйте результат компиляции с dmd -v.   -  person Bernard    schedule 29.08.2010
comment
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'   -  person lowerkey    schedule 29.08.2010


Ответы (2)


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

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

и

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

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

person Michal Minich    schedule 29.08.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.

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

person Peter Alexander    schedule 29.08.2010