欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

windows下vscode+vs2019開(kāi)發(fā)JNI的示例

 更新時(shí)間:2021年06月08日 11:38:31   作者:MONOLITHS  
本文給大家普及windows下vscode+vs2019開(kāi)發(fā)JNI的示例以及各個(gè)環(huán)節(jié)的注意事項(xiàng),文章通過(guò)示例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下

JNI全稱(chēng)是Java Native Interface(Java本地接口)單詞首字母的縮寫(xiě),本地接口就是指用C和C++開(kāi)發(fā)的接口。由于JNI是JVM規(guī)范中的一部份,因此可以將我們寫(xiě)的JNI程序在任何實(shí)現(xiàn)了JNI規(guī)范的Java虛擬機(jī)中運(yùn)行。同時(shí),這個(gè)特性使我們可以復(fù)用以前用C/C++寫(xiě)的大量代碼。

       開(kāi)發(fā)JNI程序會(huì)受到系統(tǒng)環(huán)境的限制,因?yàn)橛肅/C++語(yǔ)言寫(xiě)出來(lái)的代碼或模塊,編譯過(guò)程當(dāng)中要依賴(lài)當(dāng)前操作系統(tǒng)環(huán)境所提供的一些庫(kù)函數(shù),并和本地庫(kù)鏈接在一起。而且編譯后生成的二進(jìn)制代碼只能在本地操作系統(tǒng)環(huán)境下運(yùn)行,因?yàn)椴煌牟僮飨到y(tǒng)環(huán)境,有自己的本地庫(kù)和CPU指令集,而且各個(gè)平臺(tái)對(duì)標(biāo)準(zhǔn)C/C++的規(guī)范和標(biāo)準(zhǔn)庫(kù)函數(shù)實(shí)現(xiàn)方式也有所區(qū)別。這就造成使用了JNI接口的JAVA程序,不再像以前那樣自由的跨平臺(tái)。如果要實(shí)現(xiàn)跨平臺(tái),就必須將本地代碼在不同的操作系統(tǒng)平臺(tái)下編譯出相應(yīng)的動(dòng)態(tài)庫(kù)。

JNI開(kāi)發(fā)流程主要分為以下4步:

1、在eclipse中編寫(xiě)聲明了native方法的Java類(lèi)

2、生成JNI頭文件

3、在visual studio 中創(chuàng)建DLL 項(xiàng)目,實(shí)現(xiàn) JNI頭文件中的方法

4、在eclipse中設(shè)置Native library location,路徑為 visual studio 中生成的DLL 文件路徑,運(yùn)行java 程序

通過(guò)上面的介紹,相信大家對(duì)JNI及開(kāi)發(fā)流程有了一個(gè)整體的認(rèn)識(shí),下面通過(guò)一個(gè)示例給大家介紹vscode2019開(kāi)發(fā)JNI,再深入了解JNI開(kāi)發(fā)的各個(gè)環(huán)節(jié)及注意事項(xiàng)。

使用環(huán)境:

  • openjdk15
  • vscode
  • vs 2019

我使用maven默認(rèn)創(chuàng)建項(xiàng)目

創(chuàng)建java項(xiàng)目

將以下代碼復(fù)制進(jìn)App

public class App 
{
    static {
        System.loadLibrary("JNITest");
    }

    public native static void helloJNI();

    public static void main( String[] args )
    {
        helloJNI();
    }
}

修改App.java

接著打開(kāi)debug(Ctrl+Shift+D)

打開(kāi)debug窗口

點(diǎn)擊藍(lán)字創(chuàng)建launch.json配置文件

launch.json

打開(kāi)一個(gè)終端進(jìn)入到與App.java相同路徑
cd .\src\main\java\com\example\
再輸入javac -h .\ App.java
無(wú)警告則成功,此時(shí)路徑如下圖

創(chuàng)建.h文件

打開(kāi)vs2019,創(chuàng)建一個(gè)動(dòng)態(tài)鏈接庫(kù)

創(chuàng)建動(dòng)態(tài)鏈接庫(kù)

項(xiàng)目名如下

項(xiàng)目名

此時(shí)項(xiàng)目如下圖

JNITest

然后我們將vscode中生成的com_example_App.h復(fù)制到該項(xiàng)目目錄下,然后按下Shift+Alt+a添加該頭文件

添加頭后

可以看見(jiàn)此時(shí)編譯器無(wú)法識(shí)別該頭,所以右鍵單擊項(xiàng)目選擇屬性然后進(jìn)入此界面

配置

右邊小箭頭點(diǎn)擊編輯,此時(shí)出現(xiàn)以下界面

附加包含目錄

點(diǎn)擊右上角文件夾加號(hào)右邊出現(xiàn)省略號(hào),點(diǎn)擊省略號(hào)然后導(dǎo)航至自己的jdk安裝目錄選擇includ目錄下的所有文件夾,最終成果如下

添加后

應(yīng)用保存后可以看見(jiàn)警告已經(jīng)消失,此時(shí)打開(kāi)pch.cpp加入以下代碼并完成函數(shù)

#include "pch.h"
#include "com_example_App.h"
#include <iostream>

JNIEXPORT void JNICALL Java_com_example_App_helloJNI
(JNIEnv*, jclass) {
	std::cout << "hello JNI!" << std::endl;
}

pch.cpp

此時(shí)將上方debug選擇x64,運(yùn)行項(xiàng)目,運(yùn)行完成后在項(xiàng)目目錄x64/Debug下找到生成的dll文件JNITest.dll

dll

復(fù)制當(dāng)前路徑,打開(kāi)vscode中的launch.json添加如下參數(shù)到configurations下,目錄更改為自己項(xiàng)目下的dll

{"vmArgs": "-Djava.library.path=C:/Users/monoliths/Documents/project/java/JNITest/x64/Debug"}

launch.json

可以將dll復(fù)制到項(xiàng)目下然后同樣配置java.library.path到dll
也可以直接將dll復(fù)制到System32下或添加到Path中

此時(shí)運(yùn)行java項(xiàng)目可得到以下輸出:

最后結(jié)果

以上就是windows下vscode+vs2019開(kāi)發(fā)JNI的詳細(xì)內(nèi)容,更多關(guān)于vscode2019開(kāi)發(fā)JNI的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 淺析SpringBoot中常見(jiàn)的底層注解

    淺析SpringBoot中常見(jiàn)的底層注解

    Spring?Boot?是一個(gè)用于創(chuàng)建獨(dú)立的、基于Spring框架的Java應(yīng)用程序的框架,它提供了許多注解,下面小編就來(lái)和大家介紹一些常見(jiàn)的底層注解吧
    2023-08-08
  • Java實(shí)現(xiàn)雪花算法的原理和實(shí)戰(zhàn)教程

    Java實(shí)現(xiàn)雪花算法的原理和實(shí)戰(zhàn)教程

    這篇文章主要介紹了Java實(shí)現(xiàn)雪花算法的原理和實(shí)戰(zhàn)教程,本文通過(guò)語(yǔ)言表述和代碼的實(shí)現(xiàn)講解了該項(xiàng)算法,,需要的朋友可以參考下
    2021-06-06
  • Java泛型的用法及T.class的獲取過(guò)程解析

    Java泛型的用法及T.class的獲取過(guò)程解析

    這篇文章主要介紹了Java泛型的用法及T.class的獲取過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Java超詳細(xì)教你寫(xiě)一個(gè)網(wǎng)絡(luò)購(gòu)書(shū)系統(tǒng)案例

    Java超詳細(xì)教你寫(xiě)一個(gè)網(wǎng)絡(luò)購(gòu)書(shū)系統(tǒng)案例

    這篇文章主要介紹了怎么用Java來(lái)寫(xiě)一個(gè)購(gòu)書(shū)系統(tǒng),購(gòu)買(mǎi)書(shū)籍主要需要每本書(shū)的編號(hào)、書(shū)名、單價(jià)、庫(kù)存屬性,能夠讓客戶(hù)通過(guò)編號(hào)來(lái)選書(shū),感興趣的朋友跟隨文章往下看看吧
    2022-03-03
  • VSCode新手教程之配置Java環(huán)境的詳細(xì)教程

    VSCode新手教程之配置Java環(huán)境的詳細(xì)教程

    這篇文章主要給大家介紹了關(guān)于VSCode新手教程之配置Java環(huán)境的詳細(xì)教程,工欲善其事必先利其器,想要工作順利我們先搭建好JAVA的開(kāi)發(fā)環(huán)境,需要的朋友可以參考下
    2023-10-10
  • java中實(shí)現(xiàn)excel合并單元格詳細(xì)代碼實(shí)例

    java中實(shí)現(xiàn)excel合并單元格詳細(xì)代碼實(shí)例

    最近的工作中,遇到一個(gè)需求在生成的Excel表格后需要在尾部添加一個(gè)合并的單元格數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于java中實(shí)現(xiàn)excel合并單元格的相關(guān)資料,需要的朋友可以參考下
    2024-06-06
  • SpringBoot結(jié)合Redis實(shí)現(xiàn)會(huì)話管理功能

    SpringBoot結(jié)合Redis實(shí)現(xiàn)會(huì)話管理功能

    在Web應(yīng)用程序中,會(huì)話管理是一項(xiàng)重要的任務(wù),它涉及跟蹤用戶(hù)的身份驗(yàn)證狀態(tài)和其他相關(guān)信息,以確保用戶(hù)在與應(yīng)用程序交互時(shí)的連續(xù)性和安全性,在本文中,我們將探討如何使用Spring Boot和Redis實(shí)現(xiàn)高效的會(huì)話管理
    2023-06-06
  • Mybatis動(dòng)態(tài)拼接sql提高插入速度實(shí)例

    Mybatis動(dòng)態(tài)拼接sql提高插入速度實(shí)例

    這篇文章主要介紹了Mybatis動(dòng)態(tài)拼接sql提高插入速度實(shí)例,當(dāng)數(shù)據(jù)量少的時(shí)候,沒(méi)問(wèn)題,有效時(shí)間內(nèi)可能完成插入,但是當(dāng)數(shù)據(jù)量達(dá)到一定程度的時(shí)候,每次都一個(gè)sql插入超時(shí),所以采用了拼接sql的方式加快速度,需要的朋友可以參考下
    2023-09-09
  • java中的構(gòu)造函數(shù)什么時(shí)候被調(diào)用執(zhí)行

    java中的構(gòu)造函數(shù)什么時(shí)候被調(diào)用執(zhí)行

    這篇文章主要介紹了java中的構(gòu)造函數(shù)什么時(shí)候被調(diào)用執(zhí)行問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Java9中新增的Collector收集器

    Java9中新增的Collector收集器

    這篇文章主要介紹了Java9中新增的Collector收集器,Collector作為收集器,簡(jiǎn)單來(lái)說(shuō)就是將數(shù)據(jù)或元素收集到一起,并且flatMapping與收集器結(jié)合使用,通過(guò)提供智能元素集合進(jìn)行分組。下文相關(guān)介紹需要的小伙伴可以參考一下
    2022-06-06

最新評(píng)論