下載本文檔
版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年版供水用不銹鋼水箱購(gòu)銷合同2篇
- 機(jī)械課程設(shè)計(jì)干啥的啊
- 智能核儀器基礎(chǔ)課程設(shè)計(jì)
- 稅收法制教育課程設(shè)計(jì)
- 編曲音樂創(chuàng)作課程設(shè)計(jì)
- 羽毛球上課課程設(shè)計(jì)
- 機(jī)械設(shè)計(jì)課程設(shè)計(jì)記錄
- 聯(lián)接軸課程設(shè)計(jì)
- 網(wǎng)站前段課課程設(shè)計(jì)
- 自動(dòng)掃地機(jī)課程設(shè)計(jì)
- 《輔酶q10》教學(xué)講解課件
- SMT工程師工作簡(jiǎn)歷
- 北京市海淀區(qū)2022-2023學(xué)年七年級(jí)上學(xué)期期末語(yǔ)文試題(含答案)
- 心血管內(nèi)科醫(yī)生成長(zhǎng)手冊(cè)
- 國(guó)家開放大學(xué)一網(wǎng)一平臺(tái)電大《當(dāng)代中國(guó)政治制度》形考任務(wù)1-4網(wǎng)考題庫(kù)及答案
- 小企業(yè)會(huì)計(jì)準(zhǔn)則財(cái)務(wù)報(bào)表
- 資產(chǎn)損失鑒證報(bào)告(范本)
- 農(nóng)學(xué)技能高考【種植類】復(fù)習(xí)題庫(kù)大全-2、《植物生產(chǎn)與環(huán)境》-上(單選多選題)
- 隧道貫通方案貫通計(jì)算
- GB/T 21010-2017土地利用現(xiàn)狀分類
- GB/T 15532-2008計(jì)算機(jī)軟件測(cè)試規(guī)范
評(píng)論
0/150
提交評(píng)論