- How to install Java SDK 1.6 on Ubuntu (manual)
 - Download the Java JDK 1.6 from Sun's site. http://java.sun.com/javase/downloads/index.jsp
 - Select the Java SE Development Kit (JDK)
 - This leads to a page allowing us to select the Operating System, usually we just choose "Linux".
 - Then we came to a page which shows the available packages. I click on "jdk-6u21-linux-i586.bin" because this version is a package resembling to a tar.gz
 - Once the newly downloaded file is here, we need to extract it to a folder named "jdk1.6.0_21" (for example).
 - It's better then to move Jdk1.6.0_21 folder to "/usr/local/" which is the standard folder for programs or GUI console.
 - We will proceed to add the JAVA_HOME variable to the system. To do this, open bash.bashrc file with the following command:
 - Open a new console and run the command:
 - Achieve a simple JNI implementation on Ubuntu (Java call C/C++) Example: To Pass a string from Java to native method (C++) and prints personalized Hello World.
 - HelloWorlo.java: main function to call native method
 - Compile this class and generate class file "HelloWorld.class":
 - Generate the header for native method:
 - Write implementation C++ file (HelloWorld.cpp): HelloWorld.cpp: The implementation file for native method.
 - There is no garbage collector in C++ world, so we need to do some cleanup. We save this as HelloWorld.cpp and compile it to generate shared library:
 - Run this example as following:
 
$sudo vi /etc/bash.bashrcAt the end of the file put the following instructions.
export JAVA_HOME=/usr/local/jdk1.6.0_21 export PATH=$JAVA_HOME/bin:$PATHThis makes sure that the JAVA_HOME variable is always available in the system.
$java -versionTo which we assume the following result:
java version "1.6.0_21"
Java(TM) SE Runtime Environment (build 1.6.0_21-b06)
Java HotSpot(TM) Server VM (build 17.0-b16, mixed mode)
class HelloWorld {
    public native void sayHi(String name);
    static
    {
        System.loadLibrary("HelloWorld");
    }
    public static void main(String[] args)
    {
        HelloWorld h = new HelloWorld();
        h.sayHi("Ryan Cho");
    }
}
We announce our intention to use native method "sayHi" from "HelloWorld" library -- System.loadLibrary("HelloWorld").
javac HelloWorld.java
javah -jni HelloWorldThe header file for native method "HelloWorld.h" is generated.
HelloWorld.h: The header file for native method (automatic generated)
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     HelloWorld
 * Method:    sayHi
 * Signature: (Ljava/lang/String;)V
 */
JNIEXPORT void JNICALL Java_HelloWorld_sayHi
  (JNIEnv *, jobject, jstring);
#ifdef __cplusplus
}
#endif
#endif
#include <jni.h>
#include <iostream>
#include "HelloWorld.h"
using namespace std;
JNIEXPORT void JNICALL Java_HelloWorld_sayHi
  (JNIEnv *env, jobject o, jstring s)
{
    const char *str = env->GetStringUTFChars(s, 0);
    cout << "Hello! " << str << endl;
    env->ReleaseStringUTFChars(s, str);
}
g++ -shared -I/usr/local/jdk1.6.0_21/include -I/usr/local/jdk1.6.0_21/include/linux HelloWorld.cpp -o libHelloWorld.so!Attention: The path to your java include directory may be different.
java -Djava.library.path=. HelloWorldThe result like this:
Hello! Ryan Cho


0 意見:
張貼留言