zoukankan      html  css  js  c++  java
  • 【详解】JNI (Java Native Interface) (二)

    案例二:传递参数给C代码,并从其获取结果

       注:这里传递的参数是基本类型的参数,在C代码中有直接的映射类型。

      

           

      此案例所有生成的所有文件如下:

         

      (1)编写案例二的Java代码,如下:

      

      这里我们定义了一个native方法,此方法用于计算两数平均值。将两个Java int类型的值传递给C代码,使其计算并返回double值。然后输出到标准IO流

      注:这里加载动态链接库的方式,改为了loadLibrary,只需提供库名即可,但是接下来在运行的时候,需要指定java.library.path,使其指向库所在的目录。

      (2)编译java代码,并生成头文件

      

      javac 命令有 -h 选项,即编译并生成头文件,-h 对应的参数,是头文件生成的地址。这里"."表示,在当前目录下生成。

        生成的头文件如下所示:

      

      (3)编写源文件。

      

      这里C获取到参数,并输出到标准IO流,然后将计算结果返回给Java。

      (4)利用gcc生成动态链接库

      

      由于Java环境变量已配置,可直接引用。生成的动态链接库名为demo.so

      (5)设置java.library.path,并执行Java程序

      

      上例,通过java命令的-D选项设定运行时库路径,但是仍然提示"找不到"demo2动态库。

      经查阅,发现,在Linux系统中,共享库(也就是放入java.library.path路径下的动态库)必须符合这样的规范:

        Java代码:System.loadLibrary("XXXX");

        库文件名:libXXXX.so

      在Linux系统下共享库必须有lib作为前缀

        故修改demo2.so的文件名为libdemo2.so,并再次执行Java程序

       

      

      成功传参,并返回计算结果。

      

  • 相关阅读:
    git查日志命令
    使用git把本地目录传到远程仓库
    本地ssh设置多个git项目访问
    php的phar是什么?
    .ssh免密登录问题解决
    idea配置tomcat时,运行按钮灰色禁用状态
    idea快捷键main,print,代码提示
    windows安装hadoop找不到JAVA_HOME
    spring boot 启动时找不到主类
    jquery 删除自己
  • 原文地址:https://www.cnblogs.com/longfurcat/p/9856595.html
Copyright © 2011-2022 走看看