看到JNI(Java native Interface),发现原来JAVA中竟然可以调用C/C++写的代码,感觉很神奇,就参照网上的资料写了一个JNI的helloWorld程序。
1.首先新建一个TXT文件CTestJNI.TXT, 将文件名改为CTestJNI.java,写入以下的代码
2.编译这个文件
执行以下命令
javac CTestJNI.java
3.生成头文件CTestJNI.h
执行以下命令
javah CTestJNI
生成的CTesetJNI.h的内容应该是
Java_CTestJNI_DisplayHelloWorld()这个方法名中,CTestJNI是指调用这个方法的类名,DisplayHelloWorld是CTestJNI类中的对应的native方法。
4.生成dll
新建一个TXT 文件,重命名为CTestJNI.c,在这个文件中实现CTestJNI.h中的函数Java_CTestJNI_DisplayHelloWorld()。
下面就是生成dll文件了,在cmd中输入以下命令
cl -I***/JDK/include -I***/JDK/include/win32 -LD CTestJNI.c -FeCTestJNI.dll
其中***表示的是JDK安装的目录。并且 -I与***/JDK/include,***/JDK/include/win32 之间不能有空格。执行命令后会生成以下文件:
CTestJNI.dll
CTestJNI.lib
CTestJNI.exp
CTestJNI.obj
这里可能会遇到一个问题,当运行cl命令时候会弹出下面这个对话框:
这是因为VC/Bin/下没有“msobj80.dll,mspdb80.dll,mspdbcore.dll,mspdbsrv.exe”这四个文件,
解决的方法:
1>直接从Common7/IDE/下复制这四个文件到VC/Bin/下即可解决
2> 设置环境变量,选择 我的电脑->属性->高级->环境变量->系统变量,在path中添加C:/Program Files/Microsoft Visual Studio 8/Common7/IDE; (这是你VS2005默认安装目录,如果你不是安装在这里,请换成你自己的安装目录);注意结尾最后用“;”隔开!
这样在用cl编译就不会出现mspdb80.dll文件找不到的错误了。
5.生成dll后,运行CTestJNI.java
java CTestJNI
可以看到运行结果:C Hello World
现在还只是 知其然而不知其所以然,JNI的内容很丰富,继续研究!