91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java如何調用C++程序

發布時間:2022-02-23 15:14:43 來源:億速云 閱讀:801 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關Java如何調用C++程序,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

1、編寫Java程序:HelloWorld

代碼如下:

package HelloWorld;
public class HelloWorld {
   public native void sayHello();   
   public static void main(String[] args) {
   	System.loadLibrary("Win32Project1");
   	HelloWorld tNative = new HelloWorld();
   	tNative.sayHello();
   }
}

2、Windows環境下,在cmd中編譯以上程序

編譯通過后,使用 javah -jni HelloWorld.HelloWorld命令,在src文件夾下生成HelloWorld_HelloWorld.h文件(注意,此處我寫的兩個HelloWorld,前一個指包名,后一個指類名,由于我是寫在eclipse中的,所以需要寫明包名和類名,這樣在cmd中編譯、運行時才不會報錯)。

在執行完這一步后,能夠看到HelloWorld.java、HelloWorld.class、HelloWorld_HelloWorld.h這三個文件是位于同一個src文件夾下的,如下圖所示(注意,此處的src文件夾是在eclipse中創建HelloWorld這個java project時自動生成的,并非手動創建的):

Java如何調用C++程序

3、編寫C++程序

打開Visual Studio 2013,執行“文件—>新建—>項目—>Visual C++—>Win32 項目—>確定—>下一步–>選擇DLL(D)–>完成”。

注意,設置好項目名稱以及項目文件所在的位置,如下圖標紅處所示:

Java如何調用C++程序

創建好項目之后,將之前生成的HelloWorld_HelloWorld.h頭文件添加到項目的“頭文件”中,并在源文件中添加helloworld.cpp這一文件,如下圖所示:

Java如何調用C++程序

接下來,在helloworld.cpp文件中輸入以下代碼:

// helloworld.cpp : 定義DLL應用程序的導出函數。
//
#include "stdafx.h"
#include "HelloWorld_HelloWorld.h"
#include<iostream>
using namespace std;
JNIEXPORT void JNICALL Java_HelloWorld_HelloWorld_sayHello(JNIEnv *, jobject)
{
	cout << "hello world" << endl;
}

右鍵該項目的項目名,選擇“生成”。注意,此時會報錯&lsquo;error C1083: 無法打開包括文件: “jni.h”: No such file or directory&rsquo;,解決的辦法是:將你電腦上Java文件夾下,jdk目錄的include目錄下的jni.h文件(比如,D:\Java\jdk1.8.0_144\include)以及win32目錄下的jni_md.h文件(比如,D:\Java\jdk1.8.0_144\include\win32)都拷貝到Visual Studio\vc\include目錄下即可解決該問題。然后再次右鍵項目名稱,選擇“生成”。

4、完成以上步驟后

打開你Visual Studio的C++項目源文件所在的文件夾(也就是在創建C++項目時你所選擇的“位置”的目錄),將Debug目錄下的dll文件拷貝到Java文件夾下,jdk目錄的bin目錄中,如下圖所示:

Java如何調用C++程序

5、重新編譯HelloWorld.java程序

運行,即可得到Hello World這個結果。

Java如何調用C++程序

Java與C++的互調

C++調用Java

1)Unix環境下安裝jdk,并且設置jdk和jre的環境變量,如下:

JRE_HOME=/usr/java/jdk1.6.0_04/jre
CLASS_PATH=.:/usr/java/jdk1.6.0_04/lib/dt.jar:/usr/java/jdk1.6.0_04/lib/tools.jar
JAVA_HOME=/usr/java/jdk1.6.0_04
LD_LIBRARY_PATH=/usr/java/jdk1.6.0_04/jre/lib/amd64:/usr/java/jdk1.6.0_04/jre/lib/amd64/server
PATH=/usr/java/jdk1.6.0_04/bin

2)編寫java測試程序,代碼如下:

Java如何調用C++程序

編譯,生成MyTest.jar,將jar放到unix環境測試目錄下。

3)編寫c++測試代碼

Java如何調用C++程序

Java如何調用C++程序

Java如何調用C++程序

其中JNI_CreateJavaVM表示創建java虛擬機環境,

  • FindClass獲取需要調用的類,

  • GetMethodID獲取類中的方法;

  • CallStaticIntMethod獲取返回整型靜態方法;

  • CallBooleanMethod獲取返回布爾類型方法

  • DestroyJavaVM釋放虛擬機。

  • stoJstringjstringTostring函數,是將jvm中類型與c++類型轉換。

調用類中的方法GetMethodID調用時,第三個參數“(II)I”表示方法的輸入輸出參數類型,

“()”里面的標識輸入參數類型,括號外面的表示輸出參數類型。參數類型查看,可以根據編譯的.class文件,使用命令javap -s -p 類名查看,如下圖:

注意:一個進程中只能啟動一個java虛擬機。

Java如何調用C++程序

4)編譯與運行

編譯時設置相關的頭文件和庫文件路徑,編譯命令:g++ testjava.cpp -o testjava -I${JAVA_HOME}/include-I${JAVA_HOME}/include/linux -L${JRE_HOME}/lib/amd64/server &ndash;ljvm

運行結果如下:

Java如何調用C++程序

Java調用C++

1)編寫java代碼,如下:

Java如何調用C++程序

使用native標識方法由c++實現;

System.loadLibrary表示加載c++庫,示例中加載的庫文件為libMyTest.so

2)將java文件編譯成.class文件,使用javah命令,根據class文件生成c++的接口頭文件

Java如何調用C++程序

此時生成MyTest.h文件,內容如下:

Java如何調用C++程序

3)編寫接口函數的實現,如下:

Java如何調用C++程序

4)編譯c++文件,生成庫文件

Java如何調用C++程序

這時生成了libMyTest.so庫文件。

配置庫文件到環境變量中

exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:/export/home/process/PM/testjava

5)將java程序的jar文件放到同一個目錄下,運行jar,運行結果如下,此時調用的sub函數,是C++程序實現的。

Java如何調用C++程序

關于“Java如何調用C++程序”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

叙永县| 台北县| 日土县| 邳州市| 当雄县| 青铜峡市| 陆河县| 彭泽县| 溆浦县| 永川市| 桐庐县| 扎赉特旗| 汽车| 老河口市| 金湖县| 盈江县| 枞阳县| 芷江| 如皋市| 琼海市| 博野县| 依兰县| 邵阳县| 民乐县| 公主岭市| 龙川县| 色达县| 枣强县| 定襄县| 阿城市| 乌拉特中旗| 德阳市| 荆门市| 丹江口市| 六安市| 淮安市| 固安县| 卓尼县| 淮滨县| 顺昌县| 屏东市|