Linuxプラットフォームの下でJNIを使います。
参考:http://www.ibm.com/developerworks/cn/java/l-linux-jni/
ただし、参考中のバージョンは古すぎて、初心者の参照には不利です。
環境:gentoo、jdk-1.6、gcc version 4.3.4(Gentoo 4.3.4 p 1.0、pie-105.1.5)
1.
$vi Hello Jni.java
$vim Hello Jni.cpp
$vim ToSay.java
ただし、参考中のバージョンは古すぎて、初心者の参照には不利です。
環境:gentoo、jdk-1.6、gcc version 4.3.4(Gentoo 4.3.4 p 1.0、pie-105.1.5)
1.
$vi Hello Jni.java
$ cat HelloJni.java
class HelloJni {
public native void SayHello(String name);
static {
try {
System.loadLibrary("HelloJni");
}
catch (UnsatisfiedLinkError e) {
System.err.println("Cannot load HelloJni library:
" +
e.toString());
}
}
}
2. $ export CLASSPATH=.:$CLASSPATH
$ javac HelloJni.java
3.$ javah -classpath . HelloJni
4.$vim Hello Jni.cpp
$ cat HelloJni.cpp
#include "HelloJni.h"
#include <stdio.h>
//@see HelloJni.h function
JNIEXPORT void JNICALL Java_HelloJni_SayHello (
JNIEnv * env, jobject arg, jstring instring) {
// instring UTF
const jbyte *str =
(const jbyte *)env->GetStringUTFChars(instring, JNI_FALSE);
printf("Hello, %s
", str);
// str Java 。
env->ReleaseStringUTFChars(instring, (const char *)str);
return;
}
5.
$ g++ -fPIC -O2 -shared -Wl,-soname,libHelloJni.so.1 -o libHelloJni.so.1.0 -I/opt/sun-jdk-1.6.0.17/include/ -I/opt/sun-jdk-1.6.0.17/include/linux HelloJni.cpp
$ ln -sf libHelloJni.so.1.0 libHelloJni.so.1
$ ln -sf libHelloJni.so.1 libHelloJni.so
lrwxrwxrwx 1 mg mg 16 2010-04-07 13:28 libHelloJni.so -> libHelloJni.so.1
lrwxrwxrwx 1 mg mg 18 2010-04-07 13:28 libHelloJni.so.1 -> libHelloJni.so.1.0
-rwxr-xr-x 1 mg mg 6659 2010-04-07 14:20 libHelloJni.so.1.0
6.$vim ToSay.java
$ cat ToSay.java
import java.util.*;
public class ToSay {
public static void main(String argv[]) {
ToSay say = new ToSay();
}
public ToSay() {
HelloJni h = new HelloJni();
// Marlgl
h.SayHello("Marlgl");
}
}
$ javac ToSay.java
$ java ToSay
Hello, Marlgl