Win10: ASDF не может загрузить систему (ошибка ASDF_OUTPUT_TRANSLATION)
Обновление 2
Я думаю, что @ faré прав, это проблема перевода вывода.
Итак, я объявил переменную среды ASDF_OUTPUT_TRANSLATIONS
и установите его E:/
, Сейчас (asdf:require-system "my-system")
выдает другую ошибку: Uneven number of components in source to destination mapping: "E:/"
что привело меня к этой SO-теме.
К сожалению, его решение не работает для меня. Поэтому я попробовал другой ответ и установил ASDF_OUTPUT_TRANSLATIONS
в (:output-translations (t "E:/"))
, Теперь я получаю еще одну ошибку:
Invalid source registry (:OUTPUT-TRANSLATIONS (T "E:/")).
One and only one of
:INHERIT-CONFIGURATION or
:IGNORE-INHERITED-CONFIGURATION
is required.
(will be skipped)
Исходное сообщение
У меня есть простое определение системы, но я не могу заставить ASDF загрузить его.
(asdf-версия 3.1.5, sbcl 1.3.12 (обновлена до 1.3.18 AMD64), слизь 2.19, Windows 10)
Что я пробовал до сих пор
Следуя инструкции ASDF: "4.1 Настройка ASDF для поиска ваших систем"
Там это говорит:
Для пользователей Windows, начиная с ASDF 3.1.5, начните с вашего%LOCALAPPDATA%, который обычно равен ~/AppData/Local/ (но вы можете запросить в терминале CMD.EXE echo %LOCALAPPDATA%, чтобы убедиться) и под ним создайте конфигурация подпути /common-lisp/source-registry.conf.d/
Это именно то, что я сделал:
- Вторя
%LOCALAPPDATA%
который оцениваетC:\Users\my-username\AppData\Local
- Под ней я создал подпапки config\common-lisp\source-registry.conf.d\ (Всего:
C:\Users\my-username\AppData\Local\config\common-lisp\source-registry.conf.d\
Руководство продолжается:
там создайте файл с любым именем на ваш выбор, но с типом conf, например
50-luser-lisp.conf
; в этом файле добавьте следующую строку, чтобы сообщить ASDF о рекурсивном сканировании всех подкаталогов в /home/luser/lisp/ для файлов.asd: (:tree "/home/luser/lisp/") Этого достаточно. Вы можете заменить /home/luser/lisp/ везде, где вы хотите установить свой исходный код.
В папке source-registry.conf.d я создал файл my.conf и поместил в него (:tree "C:/Users/my-username/my-systems/")
, Эта папка содержит my-system.asd.
И тут начинается странная часть:
Если я сейчас наберу (asdf:require-system "my-system")
в REPL я получаю следующую ошибку:
Не могу создать каталог C:\Users\my-username\AppData\Local\common-lisp\sbcl-1.3.12-win-x86\C\Users\my-username\my-systems\C:\
Таким образом, проблема не в том, что ASDF не находит файл, а делает - но (по какой-то причине) он пытается создать действительно странную иерархию подпапок, которая в конечном итоге терпит неудачу, потому что в конце он пытается создать папку C:
но Windows не допускает имена, содержащие двоеточие.
Другой подход: (push path asdf:*central-registry*)
Если я попробую
> (push #P"C:/Users/my-username/my-systems/" asdf:*central-registry*)
(#P"C:/Users/my-username/my-systems/"
#P"C:/Users/my-username/AppData/Roaming/quicklisp/quicklisp/")
> (asdf:require-system "my-system")
Я получаю точно такую же ошибку.
Я не знаю что делать.
Обновить
Из-за природы странного пути, который пытался создать ASDF, я подумал, что, возможно, смогу обойти проблему, указав относительный путь вместо абсолютного. Так я попробовал(:tree "\\Users\\my-username\\my-systems")
в моем файле conf. Все та же ошибка.
1 ответ
Гм. Это похоже на проблему вывода-перевода.
У меня сейчас нет машины с Windows, но все это работало в прошлый раз, когда я пытался.
Можете ли вы на данный момент настроить некоторые специальные выходные-переводы, чтобы они работали?