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'
Есть ли какие-то пути, которые я должен указать, чтобы заставить стандартную библиотеку работать?
Ответы
Ответ 1
Посмотрите файл ~\windows\bin\sc.ini
в каталоге установки dmd. Он содержит неявные аргументы командной строки для dmd, которые должны выглядеть так: dmd 2.048:
LIB="%@P%\..\lib";\dm\lib
и
DFLAGS="-I%@P%\..\..\src\phobos" "-I%@P%\..\..\src\druntime\import"
Если они в порядке, и это не работает, возможно, ваша установка будет нарушена. Я рекомендую вам просто загрузить сжатую версию компилятора и распаковать ее поверх вашей установки.
Ответ 2
Когда вы получаете такие ошибки, это означает, что 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
.
Если оба они не работают, я рекомендую переустановку с нуля.