Java的本地调用jni。调用c为例。在Windows下调用.dll文件;在Linux下调用.so文件。
1 Java部分:写一个Java调用的方法。
注意:动态库的名字的写法:
Windows环境:
loadLibrary("libname");
注意调用的时候要用全名,扩展名可以不写。
Linux环境:
loadLibrary("name");
注意调用的时候不要用全名,要去掉前面的lib和后面的扩展名。
编译Java文件。然后用Javah 生成.h文件给c程序用。
注意:如果Java文件又包的话,生成的.h是不一样的。.h中的函数名会带上包名。例如:cn/common/testlib.Java,生成的.h中的函数名前面会是:cn_common_testlib。如果没有包,生成的.h中的函数名就没有cn_common_
2 写好c程序,编译生成.dll或.so
vc可以直接生成,或用命令行加参数的方法生成。
3 .dll和.so放置的位置:libname.dll/libname.so
Windows环境:
loadLibrary("libname");
注意调用的时候要用全名,扩展名可以不写。
在环境变量设置PATH=%libname.dll的位置%,这样Java即可找到自己定义的库了。
Linux环境:
loadLibrary("name");
注意调用的时候不要用全名,要去掉前面的lib和后面的扩展名。
在环境变量设置:修改/etc下的profile文件加入这两句:
LD_LIBRARY_PATH=libname.so的位置
export LD_LIBRARY_PATH
或者直接放在%Java_HOME%/jre/lib/i386/下面。