【问题标题】:chicken scheme -- csc cannot locate 'chicken.foreign.import.so'鸡计划 - csc 找不到“chicken.foreign.import.so”
【发布时间】:2018-12-06 19:14:15
【问题描述】:

我正在尝试在 Chicken Scheme 中使用一些内联 C 在 OS X 上编写一个简单的程序,其中 Chicken 已经安装了自制软件。

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

【问题讨论】:

    标签: scheme chicken-scheme


    【解决方案1】:

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

    所以你需要这样做

    (import (chicken foreign))
    

    【讨论】:

    • 完美!这正是我做错的。如果chicken.foreign.import.so不小心被安装在了一个陌生的地方,你怎么告诉csc/chicken去哪里找?
    • 您可以使用CHICKEN_REPOSITORY_PATH 环境变量或repository-path 运行时参数来定义它在您的系统中搜索动态扩展的位置。但除非你真的知道自己在做什么,否则我不会推荐这个:)
    • 顺便说一下,如果您想要更直接的支持,我建议您访问#chickenfreenode。那里的 CHICKEN 用户比 Stack Overflow 上的用户多得多。 chicken-users 邮件列表也不错。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多