参考文档:IBM 用jni进行java编程 不过该网站比较慢,并且内容细化,页面比较多。最好下载ZIP包本地慢慢看。还有一个JNI入门教程之HelloWorld篇 CSDN的BLOG上的,经常访问不了,建议用BAIDU搜索后再看网页快照比较方便。我主要是参照第一篇。 Java 本机接口(Java Native Interface (JNI))是一个本机编程接口,它是 Java 软件开发工具箱(Java Software Development Kit (SDK))的一部分。JNI 允许 Java 代码使用以其它语言(譬如 C 和 C++)编写的代码和代码库。Invocation API(JNI 的一部分)可以用来将 Java 虚拟机(JVM)嵌入到本机应用程序中,从而允许程序员从本机代码内部调用 Java 代码。1、WINDOWS:参照第一篇的步骤,基本没有什么问题,只要你安装了VC6以及设置一下JAVAC的BIN文件路径,不能编译JAVA文件时会报告 'javac' 不是内部或外部命令,也不是可运行的程序或批处理文件。 2、LINUX下编译:参照以前的BLOG设置好JDK。我用的是ULTRAEDIT的FTP文件编辑功能。其实也可以直接使用资源管理器直接FTP上去当作一个目录操作。 第一步编译JAVA文件:OK javac Sample1.java public class Sample1 第二步:javah Sample1得到.H文件 #include <jni.h> #ifdef __cplusplus 第三步:Windows: cl -Ic:\jdk\include -Ic:\jdk\include\win32 -LD Sample1.c -FeSample1.dll #include "Sample1.h" for(i=0;i<strlen(cap);i++) 还有一个cc: unrecognized option `-G',不管了,看到SO文件生成了开始测试 java Sampe1 结果错误 Exception in thread "main" java.lang.UnsatisfiedLinkError: no Sample1 in java.library.path 又再次找了半天,发现是因为:jdk 1.3以后 System.loadLibrary 要用System.Load代替 重新编译、运行,结果Exception in thread "main" java.lang.UnsatisfiedLinkError: Expecting an absolute path of the library: Sample1。 改为 System.load("Sample1.so");也是一样,一怒之下改为绝对路径,结果 Exception in thread "main" java.lang.UnsatisfiedLinkError: /home/sf/Sample1.so:/home/sft/Sample1.so: cannot dynamically load executable 在于LS一看,Sample1.so文件好像是可执行文件,一运行./Sample1.so,果然是的。想想前面编译时的问题,看来还是编译器CC的问题。应该这样编译: gcc -fPIC -c Sample1.c 最后重新运行 JAVA SAMPLE1。终于OK了。 330 字体:大 中 小 |
![]() | 永久地址 http://www.shengfang.org/blog/p/javajni1.php |
![]() | 引用地址 http://www.shengfang.org/blog/tb.php?tb_id=1115015113 |
2005年5月2日14:25星期一 [Dev开发]






