public class HelloWorld { public native void print(String str); //声明本地方法 public static void main(String[] args) { new HelloWorld().print("world!"); //System.out.println(System.getProperty("java.library.path")); } static{ //System.loadLibrary("helloworld"); // 加载库文件 System.load("/Users/zhaoshun/solibs/libhello.so"); } } /** * * Class: jni_sample_HelloWorld * Method: print * Signature: (Ljava/lang/String;)V * JNIEXPORT void JNICALL Java_jni_sample_HelloWorld_print(JNIEnv *, jobject, jstring); */
#include <iostream.h> #include <jni.h> #include "jni_sample_HelloWorld.h" using namespace std; JNIEXPORT void JNICALL Java_jni_sample_HelloWorld_print(JNIEnv *env, jobject obj, jstring name) { const char* pname = env->GetStringUTFChars(name,NULL); cout <<"Hello,"<< pname << endl; } /* c文件中的这么写的 str = (*env)->GetStringUTFChars(env,prompt,NULL); */
编译
g++ -dynamiclib -o libhello.so HelloWorld.cpp -framework JavaVM -I/System/Library/Frameworks/JavaVM.framework/Headers
运行结果:
Hello,world!