天天看點

SWIG幹了什麼

SWIG 是一個非常優秀的開源工具,支援您将

C/C++

代碼與任何主流腳本語言相內建。說白了,它就像一個粘合劑,充當語言互動的中間層。

本文以SWIG for Java為例,看看SWIG到底幹了什麼。

假設你有一個C/C++寫的程式,定義了一個加法算法,如:

int Add(int n, int m)
{
    return n+m;
}
           

這個檔案可能是第三方寫的,它在寫的時候也沒有準備要給Java調用呢。

然後,Java程式員很想用這個加法功能,于是他寫下了以下的Java程式來調用:

testLib.Add(100, 200);
           

那麼,其他的事情,就可以交給SWIG了。

testLib.c --> testLib_wrap.c-->testLib.so-->testLibJNI.java-->test.java--MyJavaCall.java

紅色的部分就是SWIG所做的事情。

testLib.c是原有的c檔案,隻是普通的c檔案,它不知道自己要被封裝為JNI去給Java使用。

MyJavaCall.java是Java層的調用。調用的風格為 testLib.func();

test.java是對JNI的普通java封裝,testl.java之上的調用如MyJavaCall.java對其的調用已經可以不知道它是一個JNI的調用。

testLibJNI.java是java層中JNI風格的封裝,聲明是需要帶native的。

藍色的部分的so檔案是需要用編譯器編譯出來的,如使用GCC編譯出來。

是以SWIG的使用順序一般都是先用swig生成三大檔案,然後用GCC編譯出so檔案。

繼續閱讀