Linux 下java 中添加c++

今天尝试使用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");
	}

}

   (3)    cd ../..    //返回net目录

            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;
}

     (6) 编译为.so

         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执行

            如果遇到Error: Could not find or load main class net.test.MyTest,和可能是你的.bashrc中定义的classpath不包含当前目录(.);  修改为:

           export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar


       (9) 关键一点: 要将接口给别的java程序使用,需要制作so的java项目做成jar包,并将其中的so文件拷至调用者的java-library_path下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值