案例二:传递参数给C代码,并从其获取结果html
注:这里传递的参数是基本类型的参数,在C代码中有直接的映射类型。java
此案例全部生成的全部文件以下:url
(1)编写案例二的Java代码,以下:spa
这里咱们定义了一个native方法,此方法用于计算两数平均值。将两个Java int类型的值传递给C代码,使其计算并返回double值。而后输出到标准IO流.net
注:这里加载动态连接库的方式,改成了loadLibrary,只需提供库名便可,可是接下来在运行的时候,须要指定java.library.path,使其指向库所在的目录。3d
(2)编译java代码,并生成头文件htm
javac 命令有 -h 选项,即编译并生成头文件,-h 对应的参数,是头文件生成的地址。这里"."表示,在当前目录下生成。blog
生成的头文件以下所示:get
(3)编写源文件。io
这里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程序
成功传参,并返回计算结果。
- JNI (Java Native Interface)(一)
- JNI (Java Native Interface) (二)
- JNI (Java Native Interface)(三)
- JNI (Java Native Interface)(四)