JNI——实现Java与C的协同工作(四)

第四部分 JNI在其他平台的使用方法


MacOSX平台

这里以 Hello World 为例(详见这里

本例环境为 MacOSX 10.7 + JDK 1.7

1. 创建 TestMain.java NativeMethod.java

2. 编译 Java 程序

$ javac TestMain.java

3. 用 JNI 生成头文件 NativeMethod.h

$ javah -jni NativeMethod

4. 创建 TestOne.c TestTwo.c

———————————————————————————————— 至此为止,一切步骤均与linux下相同

5. 编译 C 文件

$ gcc -I /System/Library/Frameworks/JavaVM.framework/Headers -c clmplOne.c clmplTwo.c // 注意:这里的路径是JDK头文件所在位置

6. 生成动态链接库libNativeTest.jnilib

$ gcc -dynamiclib -o libNativeLib.jnilib clmplOne.o clmplTwo.o // MacOSX下动态链接库与其他平台略有不同

7. 运行 TestMain.class 程序

$ java TestMain //直接运行即可

经验证,结果与 Linux 平台相同。


Windows平台(2种方法)

同使用 Hello World 的例子

1. 创建 TestMain.java 和 NativeMethod.java

2. 编译 Java 程序

$ javac TestMain.java

3. 用 JNI 生成头文件 NativeMethod.h

$ javah -jni NativeMethod

4. 创建 TestOne.c TestTwo.c

———————————————————————————————— 至此为止,一切步骤均与linux下相同


方法1(命令行模式,不推荐):

4.5 引入 VC 编译环境(也可以直接添加环境变量)

$ call "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\vcvars64.bat" // 这里我用的是 VC2010x64 版本

5. 编译 C 文件

$ cl /I "C:\Program Files\Java\jdk1.7.0_51" /I "C:\Program Files\Java\jdk1.7.0_51\include\win32" /c TestOne.c TestTwo.c // 注意:这里的路径是JDK头文件所在位置

6. 生成动态链接库 NativeTest.dll

$ link /dll TestOne.obj TestTwo.obj /out:NativeTest.dll // 注意:链接obj文件生成动态链接库,此时的链接库名称不需要加lib前缀

7. 运行 TestMain.class 程序

$ java TestMain // 直接运行即可

经验证,结果与 Linux 平台相同。


方法2(IDE模式,推荐):

5. 在 VS 中创建 dll 项目



6. 在项目中引入头文件 jni.h jni_md.h

路径分别为 C:\Program Files\Java\jdk1.7.0_51\include\jni.h

和 C:\Program Files\Java\jdk1.7.0_51\include\win32\jni_md.h

(1) 直接复制两个文件至项目文件夹并添加到项目中

(2) 在项目的“属性->配置属性->VC++目录->包含目录”中添加相应目录

7. 编译获得 NativeTest.dll

直接 debug 后从项目文件夹中复制即可

8. 运行 TestMain.class 程序

$ java TestMain // 直接运行即可

经验证,结果与 Linux 平台相同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值