天天看點

java使用swig調用連結庫

java使用swig調用連結庫

1、i檔案編輯,直接将頭檔案包含進來即可

%module xxx  

%{  

#include "test.h"

%}

%include "test.h"

2、生成cxx檔案。如果連結庫是c的,-c++可以省略。

swig -c++ -java -package com.test -outdir ./ -I../include xxx.i

3、編譯cxx檔案

windows的建議采用vc編譯,linux采用codeblocks。

4、vc編譯如下:

1)、在vc6中建立新的dll工程,建立一個空白的cpp檔案,将swig生成的cxx檔案内容拷貝進去;

2)、把依賴的頭檔案拷貝到工程根目錄,也就是和上面cpp一個位置;

3)、jni.h和jni_md.h是項目依賴的,需要将它們拷貝到vc6的VC98\Include檔案夾;

4)、在根目錄下建立一個檔案夾,将需要依賴的lib檔案放進去,然後在工程--設定--連接配接頁籤中的“對象/庫子產品”中加入

lib/xxx.lib,每加一個都有空格;

5)、至此就可以調試了,調試過程中發現的代碼錯誤可以修改;

6)、在菜單欄空白處右鍵選元件,出現的新工具可以切換debug和release方式。

5、codeblocks編譯問題。

1)、解決code::blocks 不能編譯問題:

Go to the left panel that says projects, and right-click on .cpp file. Select properties, then go to build. Check the boxes under the heading Belongs in Targets: "Debug" and "Release"

2)、不讓編譯時輸出“dereferencing type-punned pointer will break strict-aliasing rules”方法

凡gcc/g++地方 都改 

gcc -Wno-strict-aliasing

g++ -Wno-strict-aliasing

6、swig參數說明: 

1)-c++ -java 

   告訴swig将C++接口轉換為java接口。如果是将C接口轉換為java接口,就不需要-c++,直接寫 swig -java就可以。 

2)-package 

   生成的java類的包的名稱 

3) -I 

   xxx.i中include的.h檔案的路徑 

4)xxx.i 

   swig的.i檔案 

  執行這條指令後,将在swig路徑下生成幾個檔案 

1)test_wrap.cxx 

   C++檔案,包裝器檔案。它将C++類的方法轉換為C的函數。 

2)test.java 

   這是與剛才定義的module同名的一個類。 

3)testJNI.java 

   打開這個檔案可以看到,C++類的方法都轉化為Java的靜态方法。 

4)其他與C++類同名的Java類 

   每一個C++類都被轉化為與之對應的Java類,并且類名,方法明完全一樣。