红联Linux门户
Linux帮助

Windows、Linux、Mac OSX编译jni动态库

发布时间:2017-07-02 10:55:32来源:blog.csdn.net/himayan46作者:枫竹梦
在不同平台下默认调用不同名字的动态库,在Windows平台调用name.dll,在Linux平台调用libname.so,在OSX下调用libname.jnilib。不同平台下的编译的方法也有些区别。
 
Windows平台
gcc -Wl,--add-stdcall-alias -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32" -shared -o hello.dll HelloJNI.c
 
Linux平台
gcc -I/path/to/jni_header -shared -o hello.so helloJNI.c
 
OSX
gcc -I/System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers/  -c helloJNI.c
gcc -dynamiclib -o libhello.jnilib helloJNI.o
 
其他参考:javah生成带有包名的头文件
无包名情况
多数的demo都是基于这种条件,假设在目录jni/下有一个包含native方法的文件Hello.class。进入jni/目录,直接执行javah Hello,就可以在jni/目录下生成文件Hello.h文件。
有包名情况
假设文件Hello.class在包com.furzoom中,文件在目录jni/com/furzoom/Hello.class中,则进入jni/目录,执行javah com.furzoom.Hello,就可以在jni/目录下生成文件com_furzoom_Hello.h文件。
总结
javah命令的用法可以总结为:
javah -jni -classpath /look/up/path -d /output/path fully-qualified-classname
例如:
javah -jni -classpath ./bin -d ../jni com.furzoom.HelloJNI
 
本文永久更新地址:http://www.linuxdiyf.com/linux/31829.html