Java的native调用几点注意

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/下面。

你可能感兴趣的:(java,linux,windows,jni,vc++)