夢迴程式設計-由LD_LIBRARY_PATH引發JNI的理解
前些天在配置通過OCI的方式連線Oracle中曾進碰到一個關於“java.lang.UnsatisfiedLinkError: no XXX in java.library.path”這麼一個問題,這個問題糾結了許久才解決,解決方式參考前面的文章。
趁雙休日好好的理解一下產生這個問題的來龍去脈。
先看一段話先:
PATH is the environment variable.
java.library.path is the system properties.
When the java application started, JVM will set java.library.path’s value using PATH’s value.
In java program, it’s very difficult to get the value of environment variables, but it’s very easy to get/set system properties. Use
PATH is the environment variable.
java.library.path is the system properties.
When the java application started, JVM will set java.library.path’s value using PATH’s value.
In java program, it’s very difficult to get the value of environment variables, but it’s very easy to get/set system properties. Use
System.getProperty(”project_root”, “..”);
System.setProperty(”project_root”, “..”);
System.setProperty(”project_root”, “..”);
java.libaray.path 是system properties,在windows系統通常是使用PATH的值,而在Linux上是用LD_LIBRARY_PATH的值。 隨便也說一下java.class.path,他是對應於CLASSPATH中的值。
那LD_LIBRARY_PATH的值主要是幹什麼呢?他是來處理非標準路徑下的”共享庫“的,可以理解成windows 的dll,但在linux下是*.so的檔案。
那LD_LIBRARY_PATH的值主要是幹什麼呢?他是來處理非標準路徑下的”共享庫“的,可以理解成windows 的dll,但在linux下是*.so的檔案。
說完了基本的概念,再來看看OCI是怎麼連線Oracle的,其實OCI是通過JNI(java native interface)的方式來訪問Oracle的,請看下圖
1)我們知道Oracle的驅動是classes12.jar(ojdbc14.jar),這裡應該對應著java-class;
2)同樣我們在JBOSS啟動指令碼中設定 JBOSS_NATIVE_DIR=”/opt/instantclient_10_2″,其實就是將LD_LIBRARY_PATH=”/opt /instantclient_10_2″,而在這個目錄下有大量的*.so檔案,這些應該對應native;
3)至於jni-stub是一些存根檔案,可以參考一下JNI相關的說明,這裡就暫不描述了(有時間可以再深入學習)。
1)我們知道Oracle的驅動是classes12.jar(ojdbc14.jar),這裡應該對應著java-class;
2)同樣我們在JBOSS啟動指令碼中設定 JBOSS_NATIVE_DIR=”/opt/instantclient_10_2″,其實就是將LD_LIBRARY_PATH=”/opt /instantclient_10_2″,而在這個目錄下有大量的*.so檔案,這些應該對應native;
3)至於jni-stub是一些存根檔案,可以參考一下JNI相關的說明,這裡就暫不描述了(有時間可以再深入學習)。
本文轉自 神相 51CTO部落格,原文連結:http://blog.51cto.com/shenxiang/269201,如需轉載請自行聯絡原作者
相關文章
- 由重構react元件引發的函數語言程式設計的思考React元件函數程式設計
- JNI程式設計基礎(一)程式設計
- 由一把手槍引發的設計思考
- 由一把手槍的設計引發的思考
- 理解Golang併發程式設計Golang程式設計
- 如何理解golang的併發程式設計Golang程式設計
- 如何理解Python的迴圈設計Python
- 程式設計師的最大噩夢程式設計師
- 我所理解的 iOS 併發程式設計iOS程式設計
- 2、從引數估計的角度理解邏輯迴歸邏輯迴歸
- 由吃飯引發的思考
- 淺談雙人遊戲的設計與魅力——由《雙人成行》引發的思考遊戲
- 程式設計師突然倒地!中軟國際迴應稱系低血糖引發程式設計師
- 結對程式設計,我的噩夢程式設計
- 由一個emoji引發的思考
- 由春節回家難引發的思考
- 由京東發貨引發的思考和分析
- 可能引發程式設計革命的4門語言程式設計
- 95%的bug是由程式設計師造成的程式設計師
- C語言是程式設計小白的噩夢,WEB開發成為轉行程式設計師的福音!C語言Web行程程式設計師
- Flutter 中由 BuildContext 引發的血案FlutterUIContext
- 由小機硬碟引發的事件(一)硬碟事件
- 由劣質譯著引發的思索
- 【高併發】由InterruptedException異常引發的思考Exception
- 由mv命令引發的對inode的思考
- 程式設計師的最大噩夢是什麼?程式設計師
- Vue一個案例引發的「程式設計式」建立元件Vue程式設計元件
- JNI傳遞引數
- 95% 的 bug 是由程式設計師自己造成的程式設計師
- Java併發程式設計,深入理解ReentrantLockJava程式設計ReentrantLock
- Java併發程式設計——深入理解自旋鎖Java程式設計
- 迴圈結構程式設計程式設計
- 由面試題“併發程式設計的三個問題”深入淺出Synchronied面試題程式設計
- 由OGG引發的資料庫故障資料庫
- 由Siri和Alexa結婚引發的思考
- 一場由postcss-bem引發的血案CSS
- 由屎色自行車棚引發的思考
- JS語法: 由++[[]][+[]]+[+[]] = 10 ?引發的問題JS