Linux安全网 - Linux操作系统_Linux 命令_Linux教程_Linux黑客

会员投稿 投稿指南 本期推荐:
搜索:
您的位置: Linux安全网 > Linux编程 > » 正文

Step By Step(Java 本地方法篇)(2)

来源: 未知 分享至:
env, jclass cl) {
3 cout << \"Hello, Native World!\" << endl;
4 }

    我们下一步需要做的是利用平台已有的编译工具在命令行窗口编译该文件,如:
    Linux:gcc -fPIC -I jdk/include -I jdk/include/linux -shared -o libHelloNative.so HelloNative.c
    Windows: c1 -I jdk/include -I jdk/include/win32 -LD HelloNative.c -FeHelloNative.dll (也可以通过VC的IDE完成)
    生成动态库文件之后,需要将其拷贝到path(win32)或LD_LIBRARY_PATH(Linux)环境变量包含的目录下,以便于执行时操作系统可以定位到该动态库,也可以将当前动态库所在的目录添加到path(win32)或LD_LIBRARY_PATH(Linux)中。
    最后一步我们需要做的是实现调用该本地方法的Java代码,如:

 1     package mytest;
2 public class MyTest {
3 //这里调用loadLibrary方法用于加载该动态库到JVM中,以保证在使用时该方法已经被加载。
4 static {
5 System.loadLibrary(\"HelloNative\");
6 }
7 public static void main(String[] args) throws Exception {
8 HelloNative.greeting();
9 }
10 }
11 /* 输出结果如下:
12 Hello, Native World!
13 */

    2.    带有数值类型参数和返回值的本地方法:
    先介绍一下Java中原始类型和C语言(JNI)中原始类型之间的对照关系,以及他们所占有的字节数量:
    Java语言        C语言            字节数量
    boolean         jboolean         1
    byte             jbyte             1
    char             jchar             2
    short            jshort            2
    int               jint              4
    long             jlong             8
    float            jfloat             4
    double          jdouble          8
    1)    编写带有native方法的Java代码:

1     package mytest;
2 public class Printf {
3 public static native int print(int width,int precision,double x);
4 static {
5 System.loadLibrary(\"Printf\");
6 }
7 }

    2)    编写与native方法对应的C语言代码:(记着先执行命令行命令javah mytest.Printf来生成mytest_Printf.h头文件)

 1     #include \"mytest_Printf.h\"
2 #include <stdio.h>
3 JNIEXPORT jint JNICALL Java_mytest_Printf_print(JNIEnv* env, jclass cl
4 ,jint width, jint precision, jdouble x)
5 {
6 char fmt[30];
7 jint ret;
8 sprintf(fmt,\"%%%d.%df\",width,precision);
9 ret = printf(fmt,x);
10 fflush(stdout);
11 return ret;
12 }

    3)    编写调用native方法的Java测试代码:

 1     package mytest;
2 public

Tags:
分享至:
最新图文资讯
1 2 3 4 5 6
验证码:点击我更换图片 理智评论文明上网,拒绝恶意谩骂 用户名:
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 发展历史