World. У меня есть следующая проблема, пытаясь понять, как работает система модулей Guile.
- Я написал простой код
; check.scm
(setlocale LC_ALL "")
(let* ((fn (current-filename))
(dir (if (string? fn) (dirname fn) "."))
(lib (if (string? fn) (string-append (dirname dir) "/lib") "../lib")))
(add-to-load-path lib)
(add-to-load-path dir))
(display %load-path)
(newline)
(use-modules (json))
(scm->json #("hello" "world"))
(newline)
У меня есть следующая древовидная структура
$ find
.
./bin
./bin/check.scm
./lib
./lib/json
./lib/json/parser.scm
./lib/json/builder.scm
./lib/json.scm
json файлы из https://github.com/aconchillo/guile-json, без изменений
У меня есть Guile 2.2.6
В этой среде я запускаю
$ guile bin/check.scm
;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0
;;; or pass the --no-auto-compile argument to disable.
;;; compiling /tmp/news/bin/check.scm
;;; WARNING: compilation of /tmp/news/bin/check.scm failed:
;;; no code for module (json)
;;; compiling /tmp/news/lib/json.scm
;;; compiling /tmp/news/lib/json/builder.scm
;;; compiled /home/mob/.cache/guile/ccache/2.2-LE-8-3.A/tmp/news/lib/json/builder.scm.go
;;; compiling /tmp/news/lib/json/parser.scm
;;; compiled /home/mob/.cache/guile/ccache/2.2-LE-8-3.A/tmp/news/lib/json/parser.scm.go
;;; compiled /home/mob/.cache/guile/ccache/2.2-LE-8-3.A/tmp/news/lib/json.scm.go
(/tmp/news/bin /tmp/news/lib /usr/share/guile/2.2 /usr/share/guile/site/2.2 /usr/share/guile/site /usr/share/guile)
["hello","world"]
Мои вопросы:
Что означает сообщение «нет кода для модуля»? Кажется, что Guile может найти модуль и скомпилировать его.
Почему программа работает на одних Linux (Arch, Debian) и не работает на других (Ubuntu)? В чем разница, учитывая, что версии Guile одинаковы?
Что я делаю не так? Мое намерение состоит в том, чтобы иметь некоторую свободу в размещении библиотеки, я не хочу использовать autoconf и automake для фиксированных путей. Можно ли решить эту задачу только с add-to-load-path
?
- МБ, с уважением