我将guile嵌入正在编写的一个小程序中,我选择使用guile-readline
作为扩展。此扩展名可以很好地使用默认REPL (use-modules (ice-9 readline)) (activate-readline)
。
但是,当我尝试在通过调用scm_shell();
实例化的REPL中调用相同代码时,程序会在scm_init_readline
上出现段错误。
我发现(ice-9 readline)
可能在幕后调用(load-extension "guile-readline" "scm_init_readline")
。这样做是从默认guile REPL guile
开始的,因为在调用之后,(provided? 'readline)
会产生#t
。
仍然,从通过scm_shell(0, NULL);
调用的自定义REPL中,此表达式在scm_init_readline
处(从/usr/lib/guile/2.2/extensions/guile-readline.so
)出现段错误。有问题的特定说明:
repz cmpsb %es:(%rdi),%ds:(%rsi)
这时已经转储了寄存器,很明显rsi
是0
(所以看起来是寻址操作数段错误的内存)。
我不确定scm_shell()
是否避免了guile
REPL本身所做的关键自举操作。
在此问题上提供的任何帮助将不胜感激,我四处搜寻,发现有类似问题但无解决方案的人。