Java笔记-Java通过JNI调用Linux上so文件
生活随笔
收集整理的這篇文章主要介紹了
Java笔记-Java通过JNI调用Linux上so文件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
?
基本概念
代碼與實例
?
基本概念
流程就是下面這個圖:
?
?
?
?
代碼與實例
這里以Linux上的so文件為例。
創建好HelloWorld.java后,通過:
javac HelloWorld.java編譯為class文件。
再通過:
javah -jni HelloWorld讓其生成本地方法頭文件HelloWorld.h。
自己再創建一個HelloWorld.cpp,把HelloWorld.h中的函數定義一下;
具體文件如下:
具體內容如下:
HelloWorld.java
class HelloWorld{private native void print();public static void main(String[] args){new HelloWorld().print();}static{System.loadLibrary("HelloWorld");} }HelloWorld.h
/* 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 #endifHellWorld.c
#include <jni.h> #include <stdio.h> #include "HelloWorld.h"JNIEXPORT void JNICALL Java_HelloWorld_print(JNIEnv *env, jobject obj){printf("Hello world, hehehe!\n"); }隨后把CPP文件編譯為so文件:
gcc -I/usr/lib/jvm/java-7-openjdk-amd64/include -I/usr/lib/jvm/java-7-openjdk-amd64/include/solaris -fPIC -shared -o libHelloWorld.so HelloWorld.c截圖如下:
-f后面跟一些編譯選項,PIC是其中一種,表示生成位置無關代碼(Position Independent Code)
?
跑一下看看能不能成功:
總結
以上是生活随笔為你收集整理的Java笔记-Java通过JNI调用Linux上so文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring学习笔记-构造和Set方法注
- 下一篇: Java|达梦工作笔记-达梦数据库同步工