小编Dim*_*ris的帖子

从Common Lisp调用Haskell(SBCL)

我试图在debian pc上从Common Lisp(sbcl版本1.2.4)调用Haskell(ghc版本7.6.3).

Haskell代码是

{-# LANGUAGE ForeignFunctionInterface #-}

module Safe where

import Foreign.C.Types

fibonacci :: Int -> Int
fibonacci n = fibs !! n
    where fibs = 0 : 1 : zipWith (+) fibs (tail fibs)

fibonacci_hs :: CInt -> CInt
fibonacci_hs = fromIntegral . fibonacci . fromIntegral

foreign export ccall fibonacci_hs :: CInt -> CInt
Run Code Online (Sandbox Code Playgroud)

和C接口是

#include <HsFFI.h>
#ifdef __GLASGOW_HASKELL__
#include "Safe_stub.h"
extern void __stginit_Safe(void);
#endif
#include <stdio.h>

int foo(int i)
{
  int argc = 0;
  char *argv[] = …
Run Code Online (Sandbox Code Playgroud)

haskell sbcl common-lisp ghc cffi

6
推荐指数
0
解决办法
249
查看次数

Common Lisp:独立可执行文件和共享C库

到目前为止,我已经设法将我的Common Lisp项目构建为sbcl的独立可执行文件,如下所示:

(sb-ext:save-lisp-and-die "myexecutable" :toplevel #'main :executable t)
Run Code Online (Sandbox Code Playgroud)

另外,我已经将它调用C语言函数,编译成共享库,来自常见的lisp; 这样的事情:

(cffi:define-foreign-library libtest
      (:unix (:default "./libtest"))
      (t (:default "./libtest")))

(cffi:use-foreign-library libtest)
Run Code Online (Sandbox Code Playgroud)

或使用库的绝对路径.生成的可执行文件需要共享库libtest.so.我在同一目录中有myexecutable和libtest.so.但是,如果我使用绝对我不能分发这两个文件.如果我使用"./libtest",则从另一个目录运行时找不到该库.

这种情况的方法是什么?先感谢您!

executable sbcl common-lisp shared-libraries

3
推荐指数
1
解决办法
636
查看次数

标签 统计

common-lisp ×2

sbcl ×2

cffi ×1

executable ×1

ghc ×1

haskell ×1

shared-libraries ×1