2013-07-09 39 views

回答

1

這裏有幾個包裝發生器,但有兩個名稱從組中脫穎而出,SWIG andVerrazano


維拉薩諾是現在無人維護,因此確實應該不能依賴,但與土壤庫您使用它的工作...樣的! 以下步驟直接從using the kinect with common lisp上的示例中獲取。

首先,確保您已安裝gcxml。 (您可能需要修改根據您系統上的路徑)

sudo apt-get install gccxml 

現在在你的REPL:對我來說,這樣做的目的如下

(ql:quickload :cffi) 
(ql:quickload :verrazano) 
(verrazano:generate-binding (list :cffi :package-name :soil :input-files (list "SOIL/SOIL.h"))) 

您現在已經在土壤中的包裝。 lisp文件。直接我發現問題,枚舉被命名爲非常奇怪(。-1 - 2等),這些相同的奇怪名稱正在導出。我刪除了這些並重命名了枚舉。然後你會發現這些枚舉不在函數調用中使用,所以你需要修改'defcfun'調用來使用它們。

如果你不習慣這樣做,我會建議找一個已經做過這個的庫來作爲指導。我發現lispbuilder在這方面有一些廣泛的例子。


SWIG絕對是更好的選擇,即使在複雜的庫中也能很好地爲您服務。 一般的做法是,你寫一個SWIG接口文件,告訴swig在哪裏找到庫,然後包裝哪些特徵。 SWIG文檔是廣泛的,非常好:

http://www.swig.org/Doc2.0/Contents.html#Contents

還檢查了他們的網頁上痛飲和Common Lisp的http://www.swig.org/Doc2.0/Lisp.html

現在它是使用,原因如下獨立的接口文件是一個好主意(攝來自swig文檔)

  • 很少有必要訪問大包中的每個函數。許多C函數在腳本環境中可能很少或沒有用處。所以,爲什麼要包裝它們?
  • 單獨的接口文件提供了一個機會來提供關於如何構建接口的更精確的規則。
  • 接口文件可以提供更多的結構和組織。
  • SWIG無法解析出現在頭文件中的某些定義。擁有一個單獨的文件可以消除或解決這些問題。
  • 接口文件提供接口的更精確的定義。想要擴展系統的用戶可以訪問接口文件,並立即看到可用的內容,而無需將其從頭文件中挖掘出來。

......但是,你通常可以不用寫一個而讓SWIG解決它。對於土壤,這涉及以下內容:

編寫一個名爲soil.i的文件,並將其放入其中(您可能需要更改路徑)。

%module soil 
%{ 
/* Includes the header in the wrapper code */ 
#include "/usr/include/SOIL/SOIL.h" 
%} 

/* Parse the header file to generate wrappers */ 
%include "/usr/include/SOIL/SOIL.h" 

下運行下面的終端 痛飲-cffi - 模土壤soil.i

,你將有一個新的soil.lisp文件。與verrazano一樣,看看這個函數是如何看待這些枚舉是如何被使用的(或者更可能不被使用)。


現在,與這兩個你幾乎可以肯定想做的事情更''lispy'。通常會有指針傳遞給C函數所填充的函數,您將要從用戶隱藏C函數。

這是一個開始的地方,希望你能從這裏工作。 Ciao

相關問題