接上一篇:http://percy.blog.ubuntu.org.cn/2009/05/09/%E5%9C%A8linux%E5%B9%B3%E5%8F%B0%E4%B8%8B%E4%BD%BF%E7%94%A8jni%E8%BD%AC/
1.
pjq@localhost ~/workspace/jni $ cat Hello.java
public class Hello
{
static
{
try
{
//此处即为本地方法所在链接库名
System.loadLibrary("hello");
}
catch(UnsatisfiedLinkError e)
{
System.err.println( "Cannot load hello library:\n " +
e.toString() );
}
}
public Hello()
{
}
//声明的本地方法
public native void SayHello(String strName);
}
2.
代码:
pjq@localhost ~/workspace/jni $ javac Hello.java
3.生成Hello.h
代码:
pjq@localhost ~/workspace/jni $ javah Hello
4.
创建Hello.cpp
代码:
pjq@localhost ~/workspace/jni $ cat Hello.cpp
#include "Hello.h"
#include <stdio.h>
//与Hello.h中函数声明相同
JNIEXPORT void JNICALL Java_Hello_SayHello (JNIEnv * env, jobject arg, jstring instring)
{
//从instring字符串取得指向字符串UTF编码的指针
const jbyte *str =
(const jbyte *)env->GetStringUTFChars( instring, JNI_FALSE );
printf("Hello,%s\n",str);
//通知虚拟机本地代码不再需要通过str访问Java字符串。
env->ReleaseStringUTFChars( instring, (const char *)str );
return;
}
5.编译生成共享库
代码:
gcc -I$JAVA_HOME/include -I$JAVA_HOME/include/linux -fPIC -c Hello.cpp
代码:
gcc -shared -Wl,-soname,libhello.so.1 -o libhello.so.1.0 Hello.o
代码:
cp libhello.so.1.0 libhello.so
export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH
6.创建测试JAVA程序
代码:
import Hello;
import java.util.*;
public class ToSay
{
public static void main(String argv[])
{
ToSay say = new ToSay();
}
public ToSay()
{
Hello h = new Hello();
//调用本地方法向John问好
h.SayHello("John");
}
}
编译,出现错误:
代码:
pjq@localhost ~/workspace/jni $ javac ToSay.java
ToSay.java:2: 需要 ‘.’
import Hello;
^
ToSay.java:2: 需要 ‘;’
import Hello;
^
ToSay.java:4: 需要为 class、interface 或 enum
import java.util.*;
^
3 错误
ToSay.java:2: 需要 ‘.’
import Hello;
^
ToSay.java:2: 需要 ‘;’
import Hello;
^
ToSay.java:4: 需要为 class、interface 或 enum
import java.util.*;
^
3 错误
解决方法:将import Hello;注掉:
代码:
pjq@localhost ~/workspace/jni $ cat ToSay.java//import Hello;
import java.util.*;
public class ToSay
{
public static void main(String[]argv)
{
Hello h = new Hello();
h.SayHello("John");
}
public ToSay()
{
}
}
编译执行:
代码:
pjq@localhost ~/workspace/jni $ javac ToSay.java
pjq@localhost ~/workspace/jni $ java ToSay
Hello,John
pjq@localhost ~/workspace/jni $ java ToSay
Hello,John
在Linux平台下使用JNI,我的操作过程
- 在Linux平台下使用JNI(转)
- android
呵呵,帮你PP顶!也请来视频聊天室看看……