我正在尝试在Chicken Scheme中编写一个简单的程序,并在OS X上使用一些内联C程序,其中已经安装了Homebrew。
;; add1.ss
(import foreign)
(define add-1
(foreign-lambda* long ((unsigned-long x))
"
long n = 1
C_return(n + x);))
(print (add-1 (read)))
我感兴趣的foreign
库肯定存在。
find /usr/local | grep chicken | grep foreign | grep lib
/usr/local//Cellar/chicken/5.0.0/lib/chicken/9/chicken.foreign.import.so
但是,通过csc add1.ss
环境变量CSC_OPTIONS
中没有标志的情况下编译程序会产生:
$ csc add1.ss
Syntax error (import): cannot import from undefined module
foreign
Expansion history:
<syntax> (##core#begin (import foreign))
<syntax> (import foreign) <--
Error:shell command terminated with non-zero exit status 17920:
'/usr/local/Cellar/chicken/bin/5.0.0/bin/chicken' 'add1.ss' -output-file 'add1.c'
因此,此错误消息在运行时很有意义
$ chicken add1.ss -output-file add1.c
产生相同的故障。看似在手册页中与路径管理相关的唯一命令行选项是-include-path
。我尝试了以下方法,所有这些方法都产生了相同的错误
$ chicken add1.ss -output-file add1.c -include-path /usr/local/Cellar/chicken/5.0.0/lib/chicken/9/chicken.foreign.import.so
$ chicken add1.ss -output-file add1.c -include-path /usr/local/Cellar/chicken/5.0.0/lib/chicken/9
$ chicken add1.ss -output-file add1.c -include-path /usr/local/Cellar/chicken/5.0.0/lib/chicken
$ chicken add1.ss -output-file add1.c -include-path /usr/local/Cellar/chicken/5.0.0/lib
$ chicken add1.ss -output-file add1.c -include-path /usr/local/Cellar/chicken/5.0.0
我还尝试将chicken.foreign.import.so
作为附加的“要编译的文件”传递,但无济于事:
$ chicken add1.ss -output-file add1.c /usr/local/Cellar/chicken/5.0.0/lib/chicken/9/chicken.foreign.import.so
产生相同的错误消息。
指导chicken
或编译器驱动程序csc
在/usr/local/Cellar/chicken/...
下的目录中寻找Chicken的内部库的正确方法是什么?
答案 0 :(得分:1)
foreign
是该模块的旧名称,来自CHICKEN4。您已经安装了CHICKEN 5,我们在其中完全重构了所有模块。这个特定的名称只是为了与其他名称保持一致而被重命名。在CHICKEN 5中,此模块称为(chicken foreign)
所以您需要做
(import (chicken foreign))