日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Java笔记-Java通过JNI调用Linux上so文件

發布時間:2025/3/15 linux 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 #endif

HellWorld.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文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。