java結(jié)合jni調(diào)用本地方法_第1頁(yè)
java結(jié)合jni調(diào)用本地方法_第2頁(yè)
java結(jié)合jni調(diào)用本地方法_第3頁(yè)
java結(jié)合jni調(diào)用本地方法_第4頁(yè)
java結(jié)合jni調(diào)用本地方法_第5頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

/

javaJNI開發(fā)

Jni程序開發(fā)的一般操作步驟如下:l

編寫java中的調(diào)用類l

用javah生成c/c++原生函數(shù)的頭文件l

c/c++中調(diào)用需要的其他函數(shù)功能,實(shí)現(xiàn)原生函數(shù)(原則上可以調(diào)用任何資源)l

將項(xiàng)目依賴的所有原生庫(kù)和資源加入到j(luò)ava項(xiàng)目的java.library.path個(gè)人收集整理勿做商業(yè)用途l

生成java程序l

發(fā)布java應(yīng)用和dll庫(kù)Jni程序開發(fā)示例:步驟一:在HelloJNI工程里編寫帶有native聲明的方法的java類packagehxzon.jni;publicclassTestJNI{static{

System.loadLibrary("hellodll");

}

publicnativevoiddispHelloWorld();

publicstaticvoidmain(String[]args){

newTestJNI().dispHelloWorld();個(gè)人收集整理勿做商業(yè)用途}}

編譯產(chǎn)生hxzon/jni/TestJNI.class步驟二:控制臺(tái)進(jìn)入類文件(TestJNI.java)的所在的目錄,例如xxx/src/hxzon/jni/。運(yùn)行javah-classpath../../-jnihxzon.jni.TestJNI,類根目錄產(chǎn)生hxzon_jni_TestJNI.h頭文件。個(gè)人收集整理勿做商業(yè)用途注意類要包含包名,路徑文件夾下要包含所有包中的類,否則會(huì)報(bào)找不到類的錯(cuò)誤。classpath參數(shù)指定到包名前一級(jí)文件夾(hxzon的上一級(jí))。個(gè)人收集整理勿做商業(yè)用途Tips:在使用javah生成頭文件時(shí),要注意類所在的路徑,即包。如hello.java的package

:com.mypackage,該類所在的目錄為:

|--java

|--com

|--mypackage

|--hello.java

那在dos中使用時(shí)要做按照如下的路徑使用javah:

f:\java>javah

com.mypackage.hello

注意:要將包名com.mypackage加上個(gè)人收集整理勿做商業(yè)用途參考網(wǎng)址:/blog/static/1421431201082951815341/個(gè)人收集整理勿做商業(yè)用途hxzon_jni_TestJNI.h/*DONOTEDITTHISFILE-itismachinegenerated*/

#include<jni.h>

/*Headerforclasshxzon_jni_TestJNI*/個(gè)人收集整理勿做商業(yè)用途#ifndef_Included_hxzon_jni_TestJNI

#define_Included_hxzon_jni_TestJNI

#ifdef__cplusplus

extern"C"{

#endif

/*

*Class:

hxzon_jni_TestJNI

*Method:

dispHelloWorld

*Signature:()V

*/

JNIEXPORTvoidJNICALLJava_hxzon_jni_TestJNI_dispHelloWorld

(JNIEnv*,jobject);個(gè)人收集整理勿做商業(yè)用途#ifdef__cplusplus

}

#endif

#endif

步驟三:3.編寫.c文件。注意方法名與頭文件里的一樣,否則通過編譯,運(yùn)行時(shí)出錯(cuò)。/**hxzon_jni_TestJNI.cpp

**Createdon:2009-8-25

*

Author:hxzon

*/#include<jni.h>#include"hxzon_jni_TestJNI.h"#include<stdio.h>JNIEXPORTvoidJNICALLJava_hxzon_jni_TestJNI_dispHelloWorld

(JNIEnv*env,jobjectobj)個(gè)人收集整理勿做商業(yè)用途{

printf("Helloworld!");

return;}步驟四:安裝VC6,VC命令行下有一個(gè)編譯器,名叫cl.exe(搭建cl編譯器環(huán)境,來編譯dll動(dòng)態(tài)庫(kù))搭建cl編譯器環(huán)境,重點(diǎn)在于cl編譯器的環(huán)境變量配置配置!安裝過程中勾選注冊(cè)環(huán)境變量安裝完成后在cmd命令窗口,隨意的路徑輸入:cl/?會(huì)顯示許多的幫助信息,則表示配置成功如果其他顯示,配置失敗,注意去環(huán)境變量里檢查如下配置是否存在,不存在,自己添加上(一般來說安裝過程中會(huì)自動(dòng)配置好,自己配置的肯能會(huì)亂,所以大家注意讓安裝過程一切正常!本人是安裝過程自動(dòng)配置的)

include=D:\develop\MicrosoftVisualStudio\VC98\atl\include;D:\develop\MicrosoftVisualStudio\VC98\mfc\include;D:\develop\MicrosoftVisualStudio\VC98\include

lib=D:\develop\MicrosoftVisualStudio\VC98\mfc\lib;D:\develop\MicrosoftVisualStudio\VC98\lib

MSDevDir=D:\develop\MicrosoftVisualStudio\Common\MSDev98

path=D:\develop\MicrosoftVisualStudio\Common\Tools\WinNT;D:\develop\MicrosoftVisualStudio\Common\MSDev98\Bin;D:\develop\MicrosoftVisualStudio\Common\Tools;D:\develop\MicrosoftVisualStudio\VC98\bin

個(gè)人收集整理勿做商業(yè)用途步驟五:5.控制臺(tái)進(jìn)入類文件(TestJNI.java)的所在的目錄,例如xxx/src/hxzon/jni/,注意,此時(shí)目錄里至少需要包含個(gè)人收集整理勿做商業(yè)用途hxzon_jni_TestJNI.h"hxzon_jni_TestJNI.c兩個(gè)文件,就是使用這兩個(gè)文件生成c的動(dòng)態(tài)庫(kù)個(gè)人收集整理勿做商業(yè)用途cdxxx/src/hxzon/jni/cl–I”%java_home%\include”-I”%java_home%\include\win32”-LDhxzon_jni_TestJNI.c-Fehello.dll個(gè)人收集整理勿做商業(yè)用途或者cl-I"C:\ProgramFiles\Java\jdk1.6.0_14\include"-I"C:\ProgramFiles\Java\jdk1.6.0_14\include\win32"-LDhxzon_jni_TestJNI.c-Fehello.dll。

注意頭文件路徑用引號(hào)括起來,否則當(dāng)路徑有空格時(shí)出錯(cuò)。

以上命令的參數(shù)中,-I表示編譯包含的額外目錄,-LD表示產(chǎn)生dll,-Fe后面表示產(chǎn)生dll的名字,具體的參數(shù)可以自己用cl-help命令查看。

成功編譯,會(huì)產(chǎn)生hello.dll,hello.lib,hello.exp三個(gè)文件,將hellodll.dll拷貝到工程的src的根目錄下。(HelloJNI工程)不管我們拷貝到哪里,都要在環(huán)境變量的path里添加該hello.dll所在的目錄。此處我們把hello.dlll拷貝到工程的src的根目錄下。個(gè)人收集整理勿做商業(yè)用途參考資料:接下來是設(shè)置JVM的搜索路徑,使其能夠找到你的dll。JVM的搜索路徑由java.library.path系統(tǒng)屬性決定,其默認(rèn)值為系統(tǒng)環(huán)境變量中的PATH內(nèi)容。因此,可以通過修改PATH變量來達(dá)到設(shè)置java.library.path屬性的目的(改變之后Eclipse需要重新啟動(dòng)),一般的方法是在PATH中加入dll所在文件夾的絕對(duì)路徑。另一種方法是在Java命令的參數(shù)中加入“-Djava.library.path=dll所在文件夾的絕對(duì)路徑”來設(shè)置(可以用;分開多個(gè)路徑)。對(duì)于Eclipse開發(fā)環(huán)境上的應(yīng)用程序,可以通過修改其啟動(dòng)參數(shù),在VMarguments編輯框中加入前述參數(shù)。對(duì)于打包出來的Eclipse安裝包,可編輯其啟動(dòng)目錄下的application.ini(假設(shè)其啟動(dòng)文件為application.exe),在-vmargs后加入前述參數(shù)來設(shè)置java.library.path的值。需要注意的是,一旦JVM已經(jīng)啟動(dòng),則無(wú)法再修改java.library.path的內(nèi)容了,也就是說,通過:個(gè)人收集整理勿做商業(yè)用途System.setProperty("java.library.path","c:\mylib");個(gè)人收集整理勿做商業(yè)用途這樣的方式是無(wú)法達(dá)到目的的,因?yàn)樵搶傩允侵蛔x的。Sun公司的論壇上曾經(jīng)討論過如何在代碼中修改java.library.path的問題,結(jié)論是:不能通過代碼修改!如果嫌"java-Djava.library

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論