Cの関数をSBCLから呼んでみる
http://www.geocities.co.jp/SiliconValley-SanJose/7474/cmuclMemo.html#0001にCMUCLでの例がある.
SBCLでもほとんど同じように出来る.
以下のようなCのソースファイルcall_c_from_sbcl.cがあって,
#include <stdio.h> int call_c_from_sbcl(void){ printf("Hello\n"); return 10; }
コンパイルして共有ライブラリにする.
$ gcc -shared -o call_c_from_sbcl.so call_c_from_sbcl.c
できたcall_c_from_sbcl.soをSBCLから読み込む.
CL-USER> (use-package "SB-ALIEN") T CL-USER> (use-package "SB-C-CALL") T CL-USER> (describe 'int) INT is an external symbol in #<PACKAGE "SB-ALIEN">. ; No value CL-USER> (load-shared-object "/home/wiz/program/cl/call_c_from_sbcl.so") #P"/home/wiz/program/cl/call_c_from_sbcl.so" CL-USER> (define-alien-routine "call_c_from_sbcl" int) CALL-C-FROM-SBCL CL-USER> (call-c-from-sbcl) 10
なぜかHelloが表示されていないんだけど,返値があればまあいいか.