今天尝试使用java调用c++。 流程记录一下吧,因为遇到不少坑。
1. 创建 MyTest.java
1) mkdir net; cd net; mkdir test; //包名: net.test
2)cd testt; vi MyTest.java
package net.test; public class MyTest { private native void test(); public static void main(String[] args) { // TODO Auto-generated method stub new MyTest().test(); System.out.println("AAAAAAAAA"); } static{ //System.load("/home/liulei/workspace/eclipse/test/src/net/test.so"); System.loadLibrary("test"); } }
javac net/test/MyTest.java //在net/test下生成了MyTest.class
(4)javah -jni -classpath . net.test.MyTest //生成net.test.MyTetst.h
package net.test; public class MyTest { private native void test(); public static void main(String[] args) { // TODO Auto-generated method stub new MyTest().test(); System.out.println("AAAAAAAAA"); } static{ //System.load("/home/liulei/workspace/eclipse/test/src/net/test.so"); System.loadLibrary("test"); } }
(5) 写test.cpp. 按照net.test.MyTest.h中函数的形式定义:
#include <iostream> #include "net_test_MyTest.h" JNIEXPORT void JNICALL Java_net_test_MyTest_test (JNIEnv *env, jobject obj) { std::cout<<"-----------"<<std::endl; }
g++ -fpic -shared test.cpp -o libtest.so -I/home/liulei/software/jdk1.8.0_74/include -I /home/liulei/software/jdk1.8.0_74/include/linux/
(7) 将libtest.so的路径加入到LD_LIBRARY_PATH中。
(8) java net.test.MyTest执行