當前位置:編程學習大全網 - 源碼下載 - java如何調用C語言源文件並執行?

java如何調用C語言源文件並執行?

用java調用C語言的庫,需要使用Java提供的JNI。\x0d\例如\x0d\在C語言中定義壹個void sayHello()函數(打印Hello World);然後用Java調用這個函數來顯示Hello Word。\x0d\現在從Java和C語言兩部分解釋壹下:\x0d\1。Java部分\x0d\首先定義sayHelloNative函數,聲明為原生函數,如下:\ x0d \ public class Hello Native { \ x0d \ public。\ x0d \} \ x0d \ \編譯此類並生成類文件:\ x0d \ javac hello world.java \ x0d \ x0d \使用javah生成所需的h文件\ x0d \ javah hello native \ x0d \ \ x0d \生成的h文件如下:/*不要編輯此文件-它是機器生成的*/\ x0d \ # include \ x0d \/* hello active的頭*/\ x0d \ \ x0d \ # ifndef _ Included _ hello active \ x0d \ # define _ Included _ hello active \ hello active\ x0d \ \ x0d \ # ifdef _ _ cplusplus \ x0d \ } \ x0d \ # endif \ x0d \可以看壹下上面自動生成的程序,裏面有jni.h,這個頭文件包含在$JAVA_HOME下。\x0d\2。c語言部分\x0d\根據上面生成的H文件,寫相應的代碼實現,建立壹個HelloNative.cpp實現顯示Hello World的功能,如下:\ x0d \ \ x0d \ # include \ x0d \ # include " Hello Native。h" \ x0d \ \ x0d。JNI export void JNI call Java _ Hello native _ say Hello(JNI env *,job object)\ x0d \ { \ x0d \ printf(" Hello World!\ n ");\ x0d \} \ x0d \ x0d \代碼寫好後,我們會用gcc編譯成庫文件。該命令如下所示:\ X0d \ gcc-fPIC-I/usr/lib/JVM/Java-7-open JDK-i386/include-I/usr/lib/JVM/Java-7-open JDK-i386/include/Linux-shared-o libHelloNative.so hellonative . CPP \ X0d \ \ X0d \這將在當前目錄下生成libhellonative . so的庫文件。此時所需的庫已經生成,C語言的工作已經完成。\x0d\接下來我們需要用Java寫壹個程序來測試壹下。在程序開始之前,我們需要加載我們的庫。加載方法是調用Java系統。LoadLibrary(" hello native ");\ x0d \ \ x0d \ public class test native \ x0d \ { \ x0d \ static { \ x0d \ try { \ x0d \ system . loadlibrary(" hello active ");\ x0d \ } \ x0d \ catch(UnsatisfiedLinkError e){ \ x0d \ system . out . println("無法加載hello庫:\ n "+e . tostring());\ x0d \ } \ x0d \ } \ x0d \ public static void main(String[]args){ \ x0d \ hello active test = new hello active();\ x0d \ test . say hello();\x0d\}\x0d\}\x0d\\x0d\但是重新編譯後,運行時,問題又出現了。\ x0d \罐頭加載hello庫:\ x0d \ Java . lang . untisfieldlinkerror:Java . library . path \ x0d中沒有hello native。線程“main”Java . lang . unsatisfiedlinkerror中出現異常:hello Native . say hello()V \ x0d \ At hello Native . say hello(本機方法)\ x0d \ At test Native . main(test Native . Java:13)\ x0d \ \ x0d \未能加載庫,但庫顯然位於當前文件夾中。怎麽會加載失敗呢?\x0d\使用系統。getproperty ("java.library.path ")進行檢查,發現當前目錄在java.library.path中並不存在,主要有以下幾種解決方法:\x0d\1)將生成的庫復制到java.library.path的現有路徑中,當然這樣不太好\ X0d\2)設置環境變量exportLD_LIBRARY_PATH =。:$ ld _ library _ path,並將當前目錄添加到LD _ library _ path \x0d\3)設置java選項,並將當前目錄添加到其中。java-djava.library.path =。$ ld _ library _ path \。從高處或遠處觀看
  • 上一篇:如何制作魔塔
  • 下一篇:js定義盒子,為什麽會連再壹起且無法用外邊距分開
  • copyright 2024編程學習大全網