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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

java动态调用c++库

發布時間:2023/12/19 c/c++ 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java动态调用c++库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

最近在做一個通過java程序調用c++動態語言庫,在網上百度,谷歌找了諸多例子,還是屢試不爽。經過一番折騰還是披荊斬棘,創出一條道路。希望分享給正在迷茫的朋友們...

使用的環境

spring boot + gradle

JNI介紹

JNI全拼是Java Native Interface,中文意思為Java本地調用。JNI標準是Java平臺的一部分,它允許java和其他語言的代碼進行交互。JNI開始是為了本地已經編譯好的語言,尤其是C和C++而設計的,我們也可以使用JNI和其他語言進行溝通,我們只要調用約定受支持了就可以了。

JNI vs JNA

加載流程

使用jni和jna的區別這里便不再多說。這里我使用的是jna的方式。不多說,直接擼代碼,首先在依賴文件中加入相關jar包。

compile group: 'com.sun.jna', name: 'jna', version: '3.0.9'

windows環境

  • 定義好java需要調用的本地方法,即native

    EastmzGame.class

    /*** get game result from third* @return*/public native String getGameResult(); 復制代碼
  • 生成.class編譯文件

    在類文件的當前目錄執行,這里加入了字符,防止亂碼。

    javac -encoding utf-8 EastmzGame.java

  • 生成.h頭文件

    在src.main.java目錄下執行 javah -classpath . -jni com.bsmao.task.jni.EastmzGame

  • 再由vc編譯工具將.h文件實現并且編譯出.dll文件,linux為.so文件。

    將.dll文件放入到項目中或者放到e盤中

    我這里是放到了resources下面

  • java中再調用.dll文件
static {try{String path = ResourceUtils.getURL("classpath:jniLibs/GetData.dll").getPath();System.load(path);//System.load("E:/bsmao/dll/MFCLibrary11.dll"); //e盤的絕對地址}catch (Exception e){e.printStackTrace();}} 復制代碼
  • 測試調用結果

    這是經過處理過的數據

linux環境

定義本地方法:

本文是指定路勁讀取so文件(和so文件生成的文件路徑保持一致)

編譯.class 生成.h,.c文件

將上面兩個文件傳入到linux指定文件夾下

/usr/local/bsmao/lib

編譯出so文件 命令:

sudo cc -I /usr/local/bsmao/java/jdk1.8.0_162/include/linux -I /usr/local/bsmao/java/jdk1.8.0_162/include/ -I /usr/local/bsmao/lib/ -fPIC -shared -o libEastmzGame.so com_bsmao_task_jni_EastmzGame.c 復制代碼

生成出so文件

調用方式和windows一樣

EastmzGame eastmzGame = new EastmzGame();byte[] res = eastmzGame.ElevenAgreement(); 復制代碼

測試結果






如果覺得有幫助,請打賞...(^_^ *** ^_^)

總結

以上是生活随笔為你收集整理的java动态调用c++库的全部內容,希望文章能夠幫你解決所遇到的問題。

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