Я установил 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'
Есть ли пути, которые я должен указать в чтобы заставить работать стандартную библиотеку?
Посмотрите на файл ~\windows\bin\sc.ini
в каталоге установки dmd. Он содержит неявные аргументы командной строки для dmd, которые должны выглядеть так для dmd 2.048:
LIB="%@P%\..\lib";\dm\lib
и
DFLAGS="-I%@P%\..\..\src\phobos" "-I%@P%\..\..\src\druntime\import"
Если они в порядке, но это не работает, ваша установка, вероятно, не работает. Я рекомендую вам просто скачать заархивированную версию компилятора и распаковать ее поверх вашей установки.
Когда вы получаете подобные ошибки, это означает, что DMD не может найти файл импорта. Если вы импортируете foo.bar.xyz
, то он ожидает найти xyz.d
в некотором каталоге foo\bar\
.
Он ищет этот каталог во всех своих стандартных путях импорта, а также в текущем каталоге (например, если вы добавили каталог std
рядом с вашим tcpechoserver.d
с stdio.d
в нем, то он будет использовать это). Конечно, вам это не нужно — вам нужен стандартный stdio.d
.
Вы можете узнать, в каких каталогах он выглядит, открыв файл
C:\D\dmd2\windows\bin\sc.ini
(при условии, что вы установили в каталог по умолчанию).
Внутри он должен содержать строку:
(hidden) (hidden)
, которая указывает компилятору искать эти пути при поиске каталогов импорта. Если у вас нет этой строки по какой-либо причине (или если она отличается), попробуйте добавить эту строку в sc.ini
(в любом месте под заголовком [Environment]
должно быть
Также убедитесь, что каталог dmd2
содержит файл \src\phobos\std\stdio.d
.
Если оба эти варианта не работают, то я г рекомендую переустановить с нуля.