CHICKENというSchemeの処理系があって、SchemeコードをCのコードに変換したり、Cコンパイラを使って実行ファイルを生成してくれる。この処理系を使って、CからSchemeを呼ぶコードを書きたい。
(マニュアルを見ながら今日書き始めたばかりなので、あちこち間違ってるかも)

bind.scm

(define-external (average (int num1) (int num2)) int
 (/ (+ num1 num2) 2))

(define-external (str_len (c-string str)) int
 (string-length str))

define-externalは、処理系独自の構文で、
(define-external (関数名 (引数の型 引数名) ... ) 返り値の型 関数本体)
こんな風に書いて、Cから呼べる関数を定義する。

こうしてから、
main.c

#include <stdio.h>
#include "chicken.h"

extern int average(int, int);
extern int str_len(char*);

int main(int argc, char* argv[])
{
    int ave;
    int len;

    CHICKEN_run(CHICKEN_default_top);

    ave = average(2, 4);
    printf("%d\n", ave);

    len = str_len("test");
    printf("%d\n", len);

    return 0;
}

などと書いてコンパイルする。

csc bind.scm main.c -e
./bind

すると、CからScheme(をCにコンパイルしたもの)が呼べるはずなのだけど、

3
Segmentation fault

になる。原因がわからない。文字列を使おうとするとダメっぽい。