схема курицы - csc не может найти 'chicken.foreign.import.so' - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь написать простую программу на Chicken Scheme с некоторым встроенным C на OS X, где Chicken был установлен вместе с 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 для поиска внутренних библиотек Chicken в каталоге под /usr/local/Cellar/chicken/...?

1 Ответ

0 голосов
/ 06 декабря 2018

foreign - это старое имя этого модуля от CHICKEN 4. Вы установили CHICKEN 5, где мы полностью реорганизовали все модули.Этот конкретный был просто переименован для согласованности с другими.В CHICKEN 5 этот модуль называется (курица иностранная)

Так что вам нужно будет сделать

(import (chicken foreign))
...