鸡肉计划-csc无法找到'chicken.foreign.import.so'

时间:2018-12-06 19:14:16

标签: scheme chicken-scheme

我正在尝试在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的内部库的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

foreign是该模块的旧名称,来自CHICKEN4。您已经安装了CHICKEN 5,我们在其中完全重构了所有模块。这个特定的名称只是为了与其他名称保持一致而被重命名。在CHICKEN 5中,此模块称为(chicken foreign)

所以您需要做

(import (chicken foreign))