第四部分 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 平台相同。