JavaNative的使用说明

===HelloWorld===

make.sh
<syntaxhighlight lang="bash">
#!/bin/sh

# openbsd 4.9
# gcc 4.2.1
# openjdk 1.7.0

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
javac HelloWorld.java
javah HelloWorld
gcc -shared libHelloWorld.c -o libHelloWorld.so
java HelloWorld
</syntaxhighlight>

build.bat
<syntaxhighlight lang="text">
:: Microsoft Visual Studio 2012 Visual C++ compiler
SET VC = "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC"
:: Microsoft Windows SDK for Windows 7 and .NET Framework 4 
SET MSDK = "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A"
:: Java 1.7.0 update 21
SET JAVA_HOME = "C:\Program Files (x86)\Java\jdk1.7.0_21"

javac HelloWorld.java
javah HelloWorld
%VC%\bin\cl /I"%JAVA_HOME%\include" /I"%JAVA_HOME%\include\win32" /I"%VC%\include" /I"%VC%\lib" /I"%MSDK%\Lib" libHelloWorld.c /Fe"libHelloWorld.dll" /LD
java HelloWorld
</syntaxhighlight>

HelloWorld.java

<syntaxhighlight lang="java">
class HelloWorld
{
    private native void print();
    public static void main(String[] args)
    {
        new HelloWorld().print();
    }
    static{
        System.loadLibrary("HelloWorld");
    }
}

</syntaxhighlight>

HelloWorld.h

<syntaxhighlight lang="c">
/* 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:    print
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_HelloWorld_print
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

</syntaxhighlight>

libHelloWorld.c

<syntaxhighlight lang="c">
 #include <stdio.h>
 #include "HelloWorld.h"

 JNIEXPORT void JNICALL
 Java_HelloWorld_print(JNIEnv *env, jobject obj)
 {
     printf("Hello World!\n");
     return;
 }

</syntaxhighlight>
chmod +x make.sh<br>
./make.sh

 

posted @ 2013-07-22 23:50  walkabc  阅读(252)  评论(0编辑  收藏  举报