1. 程式人生 > >linux java 呼叫c++ 動態庫

linux java 呼叫c++ 動態庫

1,準備工作,下載jna.jar, 這是動態庫依賴的jar包

wget http://repo1.maven.org/maven2/net/java/dev/jna/jna/4.5.2/jna-4.5.2.jar

如果沒有javac,需要自己安裝,請執行

sudo yum -y install java-1.7.0-openjdk-devel.x86_64

2,

a) 編譯c code成為動態庫

g++ -fpic -shared -o libtest.so test.cpp

b)編譯java
javac -classpath jna-4.5.2.jar jnatest1.java

c)執行java

java -classpath .:jna-4.5.2.jar jnatest1

3,源code

test.cpp

using namespace std;

extern "C"

{

    void test() {

         cout << "TEST" << endl;

    }

    int addTest(int a,int b)

    {

      int c = a + b ;

      return c ;

    }

}

檔案:jnatest1.java

import com.sun.jna.Library;
import com.sun.jna.Native;

public class jnatest1 {
        public interface Clibrary extends Library {
                Clibrary INSTANTCE = (Clibrary) Native.loadLibrary("test",
                                Clibrary.class);
                void test();
                int addTest(int a,int b);
        }
        public static void main(String[] args) {
                Clibrary.INSTANTCE.test();
        int c = Clibrary.INSTANTCE.addTest(10,20);
                System.out.println(c);
        }
}