真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C++/Java調(diào)用C++動(dòng)態(tài)鏈接庫————附帶示例和詳細(xì)講解-創(chuàng)新互聯(lián)

文章目錄
  • 0 準(zhǔn)備
  • 1 C++調(diào)用動(dòng)態(tài)鏈接庫
  • 2 Java調(diào)用C++動(dòng)態(tài)鏈接庫
  • 3 運(yùn)行

成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供云岡網(wǎng)站建設(shè)、云岡做網(wǎng)站、云岡網(wǎng)站設(shè)計(jì)、云岡網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、云岡企業(yè)網(wǎng)站模板建站服務(wù),十載云岡做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。0 準(zhǔn)備

在CMake中,使用如下的方法把代碼編譯成動(dòng)態(tài)/靜態(tài)鏈接庫:

# 設(shè)置項(xiàng)目名 
project(getMatInfo)

# 設(shè)置c++版本
set(CMAKE_CXX_STANDARD 11)

 # 如果不填寫SHARE,默認(rèn)為靜態(tài)鏈接庫,或者把SHARED替換為STATIC
 add_library(getMatInfo SHARED
        getMatInfo.h
         getMatInfo.cpp)

各個(gè)平臺(tái)的動(dòng)態(tài)或靜態(tài)鏈接庫的格式,mac環(huán)境下的都是.dylib,在linux上為.so/.a文件,在windows上為.dll/.lib
在這里插入圖片描述

注意在編譯之前,需要在頭文件中聲明后面動(dòng)態(tài)鏈接庫函數(shù)中需要被調(diào)用的函數(shù)。例如,如下就是getMatInfo.h頭文件中的內(nèi)容:

#ifndef GETMATINFO_GETMATINFO_H
#define GETMATINFO_GETMATINFO_H


extern "C"{void getMatInfo(const char* path, const char* variableName,int& row, int& col);
};

#endif //GETMATINFO_GETMATINFO_H
1 C++調(diào)用動(dòng)態(tài)鏈接庫

調(diào)用方法如下:

  • 1,把頭文件getMatInfo.h放在和調(diào)用函數(shù)的同級(jí)目錄下;
  • 2,在CMakeLists.txt中添加動(dòng)態(tài)鏈接庫的路徑LINK_LIBRARIES("/Users/mac/CLionProjects/testlib/libgetMatInfo.dylib")【根據(jù)自己的情況做具體修改】;
  • 3,像正常調(diào)用方法一樣調(diào)用動(dòng)態(tài)鏈接庫中的方法,例如下面的代碼;
#include#include "getMatInfo.h"

int main() {const char *path = "/Users/mac/CLionProjects/getMatInfo/ranking.mat";
    const char* variableName = "Data"; //FigData
    int n = 0;
    int m = 0;
    getMatInfo(path, variableName, n, m);
    std::cout<< n<< " "<< m;
    }
2 Java調(diào)用C++動(dòng)態(tài)鏈接庫

常見Java調(diào)用C++的代碼方法有jni、jna、JNative。jni需要先編寫Java代碼,然后轉(zhuǎn)換成C++代碼,被調(diào)用的C++代碼再去實(shí)現(xiàn)Java轉(zhuǎn)轉(zhuǎn)后的C++方法。雖然效率最高,但是比較麻煩。

這里使用是jna調(diào)用C++中的方法,原因就是不用改寫C++的代碼,相對(duì)簡(jiǎn)單一些。不過這個(gè)需要被調(diào)用的C++方法,改寫對(duì)應(yīng)的的數(shù)據(jù)結(jié)構(gòu),以便Java調(diào)用。
常見的數(shù)據(jù)結(jié)構(gòu)映射如下:

請(qǐng)?zhí)砑訄D片描述
指針對(duì)應(yīng)的映射:
在這里插入圖片描述
這里使用的庫為:

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;

在這里插入圖片描述
在IDEA中導(dǎo)入庫的方法如下:

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

首先,繼承Library,然后定義載入動(dòng)態(tài)鏈接庫的變量,聲明調(diào)用的接口:

package com.jk.jnaTest;

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;

public interface JnaDll extends Library {JnaDll jnadll = (JnaDll) Native.load("/Users/mac/Downloads/springCloud/testLib/src/com/jk/jnaTest/libgetMatInfo.dylib", JnaDll.class);
        
    void getMatInfo(String path, String varName,IntByReference row, IntByReference col);

}

調(diào)用動(dòng)態(tài)鏈接庫的方法:

package com.jk.jnaTest;

public class JnaTest {public static void main(String[] args){IntByReference row = new IntByReference();
        IntByReference col = new IntByReference();

        String matPath = "/Users/mac/Downloads/springCloud/testLib/src/com/jk/jnaTest/Fig.mat";
        String varName = "FigData";
        JnaDll.jnadll.getMatInfo(matPath, varName,row, col);
        
        System.out.println(row.getValue());//緯度
        System.out.println(col.getValue());//個(gè)數(shù)

        System.out.println("testJna");
    }
}
3 運(yùn)行

如果是在Linux下,不實(shí)用開發(fā)集成環(huán)境,直接使用JDK自帶的指令進(jìn)行編譯和運(yùn)行。

編譯(兩個(gè)jna的包的路徑需要存在):

javac -cp .:/code/testLib/src/com/jk/jnaTest/jna-5.11.0.jar:/code/testLib/src/com/jk/jnaTest/jna-platform-5.11.0.jar -d . /code/testLib/src/com/jk/jnaTest/*.java

運(yùn)行(進(jìn)入到/code/testLib/src/com/jk/jnaTest/路徑中):

java -cp .:/code/testLib/src/com/jk/jnaTest/jna-5.11.0.jar:/code/testLib/src/com/jk/jnaTest/jna-platform-5.11.0.jar com.jk.jnaTest.JnaTest

如果是使用編譯器,那么需要打包成jar包,然后放到Linux服務(wù)器上進(jìn)行執(zhí)行:

在這里插入圖片描述

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧


新聞名稱:C++/Java調(diào)用C++動(dòng)態(tài)鏈接庫————附帶示例和詳細(xì)講解-創(chuàng)新互聯(lián)
文章出自:http://weahome.cn/article/dedcod.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部