プログラミング

LispとC言語の連携

Lispはあまり使われていないでしょうけど,一応C言語で作成したライブラリを呼び出せるようです。他と同様にシェルに全部記述しました。

#!/bin/bash

gcc -o libadd.so --shared -fPIC -xc - << EOS
int add(int x, int y) { return x + y; }
EOS

cat << EOF > add.lisp
(ql:quickload :cffi)
(cffi:load-foreign-library "libadd.so")

(defun main ()
  (write-line "Lisp START")
  (write-line (write-to-string (cffi:foreign-funcall "add" :int 100 :int 200 :int)))
  (write-line "Lisp END"))

(sb-ext:save-lisp-and-die "add" :toplevel #'main' :executable t)
EOF

sbcl --load add.lisp

if [ $? -eq 0 ]; then
  ./add
fi