Linux上编写jni实例

目录

 Linux上编写jni实例

步骤1:编写java 并编译

步骤2:生成native接口(HelloWorld.h)文件

步骤3:实现接口(HelloWorld.cpp)并编译成动态库so

步骤4:执行


 Linux上编写jni实例

注意:一定要注意顺序。先做java文件里面的native接口,然后再使用javah实现c/c++;

步骤1:编写java 并编译

//HelloWorld.java
  1 public class HelloWorld {                                                       
  2                                                                                 
  3     public native static long jni_add(int a, int b);                            
  4     static {                                                                    
  5         System.load("/home/gysun/java-test/myjni/myjni.so");//载入dll  Connector.dll
  6     }                                                                           
  7                                                                                 
  8     public static void main(String[] args) {                                    
  9         long ret = jni_add(10,20);                                              
 10         System.out.println("Hello World !" + ret);                              
 11     }                                                                           
 12                                                                                 
 13 }     



$ javac HelloWorld.java

步骤2:生成native接口(HelloWorld.h)文件

$ javah -d myjni -jni HelloWorld

此时会生成目录myjni ,目录下文件HelloWorld.h 里面内容为:

$ vim myjni/HelloWorld.h
  1 /* DO NOT EDIT THIS FILE - it is machine generated */                           
  2 #include <jni.h>                                                                
  3 /* Header for class HelloWorld */                                               
  4                                                                                 
  5 #ifndef _Included_HelloWorld                                                    
  6 #define _Included_HelloWorld                                                    
  7 #ifdef __cplusplus                                                              
  8 extern "C" {                                                                    
  9 #endif                                                                          
 10 /*                                                                              
 11  * Class:     HelloWorld                                                        
 12  * Method:    jni_add                                                           
 13  * Signature: (II)J                                                             
 14  */                                                                             
 15 JNIEXPORT jlong JNICALL Java_HelloWorld_jni_1add                                
 16   (JNIEnv *, jclass, jint, jint);                                               
 17                                                                                 
 18 #ifdef __cplusplus                                                              
 19 }                                                                               
 20 #endif                                                                          
 21 #endif 


步骤3:实现接口(HelloWorld.cpp)并编译成动态库so

 

代码实例:

  1 #include "HelloWorld.h"                                                         
  2                                                                                 
  3 JNIEXPORT jlong JNICALL Java_HelloWorld_jni_1add(JNIEnv *, jclass, jint a, jint b){
  4          long c=0;                                                              
  5          c = a + b;                                                             
  6          return c;                                                              
  7 }       

                    

编译:

$ gcc -fPIC -shared -o myjni.so HelloWorld.cpp  -I"/usr/lib/jvm/java-8-openjdk-amd64/include" -I"/usr/lib/jvm/java-8-openjdk-amd64/include/linux"

~/java-test/myjni$ ls
HelloWorld.cpp  HelloWorld.h  myjni.so

 

步骤4:执行


$ java HelloWorld
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海棠花败

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值