zoukankan      html  css  js  c++  java
  • linux下JNI开发—Hello为例

    转自:https://www.cnblogs.com/snake-hand/archive/2012/05/25/2517412.html

    前期准备:

    1、Java JDK

    2、gcc

    3、g++

    确保上述准备工作完成后开始下边的工作:

    Java代码:

    public   class  Hello {  
        static  {  
            try  {  
                System.loadLibrary("Hello" );              
            } catch  (UnsatisfiedLinkError e) {  
                e.printStackTrace();  
            }  
        }  
          
        public  Hello() {};  
          
        public   native   void  SayHello(String strName);  
    }
    

    在终端输入 javac Hello.java 后生成Hello.class 文件

    然后:javah Hello 生成 Hello.h文件

     

    然后在相同的目录下新建一个Hello.cpp文件:内容如下:

    #include "Hello.h"   
    #include <stdio.h>   
    // 与 Hello.h 中函数声明相同   
    JNIEXPORT void  JNICALL Java_Hello_SayHello  (JNIEnv * env, jobject arg, jstring instring)  
    {  
      // 从 instring 字符串取得指向字符串 UTF 编码的指针   
      const  jbyte *str =  
        (const  jbyte *)env->GetStringUTFChars( instring, JNI_FALSE );  
      printf("Hello,%s
    " ,str);  
      // 通知虚拟机本地代码不再需要通过 str 访问 Java 字符串。   
      env->ReleaseStringUTFChars( instring, (const   char  *)str );  
      return ;  
    }
    

    编译生成动态库

    gcc -I /usr/java/jdk1.8.0_73/include/ -I /usr/java/jdk1.8.0_73/include/linux/  Hello.cpp -fPIC -shared -o Hello.so
    

     注意

    /usr/java/jdk1.8.0_73/include/
    /usr/java/jdk1.8.0_73/include/linux/
    这两目录根据自己的java jdk的安装目录而变。

    所有文件

    Hello.class  Hello.cpp  Hello.h  Hello.java  Hello.so

    最后通知动态链接程序此共享文件的路径。

    export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH 

    最后是java测试代码:

    public   class  ToSay   
     {   
         public   static   void  main(String argv[])   
         {   
             ToSay say = new  ToSay();   
         }   
         public  ToSay()   
         {   
             Hello h = new  Hello();   
             // 调用本地方法向 John 问好   
             h.SayHello("John" );              
         }   
     }
    

     用 javac 编译 ToSay.java,生成 ToSay.class 
    向执行普通 Java 程序一样使用 java ToSay,我们会看到在屏幕上出现 Hello,John。 

     

  • 相关阅读:
    Flask: 用户认证
    Flask: Web表单
    Flask QuickBoot
    Flask: 构建API
    4 Gbase 8a 集群管理工具
    3 GBase 8a客户端
    2 GBase 8a 数据库版本升级
    1 GBase 8a MPP Cluster V95 安装和卸载
    0 GBase 8a MPP Cluster 数据库核心技术
    Chrome Network面板
  • 原文地址:https://www.cnblogs.com/chaofn/p/9931813.html
Copyright © 2011-2022 走看看