Linux 下java 中添加c++
2016-04-19 11:51
447 查看
今天尝试使用java调用c++。 流程记录一下吧,因为遇到不少坑。
1. 创建 MyTest.java
1) mkdir net; cd net; mkdir test; //包名: net.test
2)cd testt; vi MyTest.java
(3) cd ../.. //返回net目录
javac net/test/MyTest.java //在net/test下生成了MyTest.class
(4)javah -jni -classpath . net.test.MyTest //生成net.test.MyTetst.h
(5) 写test.cpp. 按照net.test.MyTest.h中函数的形式定义:
(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下。
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下。
相关文章推荐
- Linux 更改目录及子目录权限
- 笔记:构建嵌入式Linux系统(第二版)—— 第一章 概述
- linux 红帽7忘记root密码
- linux下的内存分布
- centos ab压力测试工具安装
- 鸟哥私房菜linux基础学习笔记 3
- Linux用户与用户组详解
- linux下mysql开启远程访问权限及防火墙开放3306端口
- Linux search file path
- linux 关于MYSQL数据库命令(查看,备份等操作)
- PostgreSQL(Linux)安装、启动、停止、重启
- Java程序执行Linux命令
- Linux修改系统时间命令
- C 文件夹遍历(Windows + Linux)跨平台
- 【linux】用户与组
- Linux开机自启动总结
- linux之SQL语句简明教程---Alias
- centos6.5下安装mysql
- [Linux] Netstat 执行过慢,占CPU100%,原因查找
- CentOS6.5 下安装vim7