梦回编程- 由LD_LIBRARY_PATH引发JNI的理解
生活随笔
收集整理的這篇文章主要介紹了
梦回编程- 由LD_LIBRARY_PATH引发JNI的理解
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
前些天在配置通過OCI的方式連接Oracle中曾進(jìn)碰到一個關(guān)于“java.lang.UnsatisfiedLinkError: no XXX in java.library.path”這么一個問題,這個問題糾結(jié)了許久才解決,解決方式參考前面的文章。 趁雙休日好好的理解一下產(chǎn)生這個問題的來龍去脈。 先看一段話先:
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”, “..”); java.libaray.path 是system properties,在windows系統(tǒng)通常是使用PATH的值,而在Linux上是用LD_LIBRARY_PATH的值。 隨便也說一下java.class.path,他是對應(yīng)于CLASSPATH中的值。
那LD_LIBRARY_PATH的值主要是干什么呢?他是來處理非標(biāo)準(zhǔn)路徑下的”共享庫“的,可以理解成windows 的dll,但在linux下是*.so的文件。 說完了基本的概念,再來看看OCI是怎么連接Oracle的,其實(shí)OCI是通過JNI(java native interface)的方式來訪問Oracle的,請看下圖
1)我們知道Oracle的驅(qū)動是classes12.jar(ojdbc14.jar),這里應(yīng)該對應(yīng)著java-class;
2)同樣我們在JBOSS啟動腳本中設(shè)置? JBOSS_NATIVE_DIR=”/opt/instantclient_10_2″,其實(shí)就是將LD_LIBRARY_PATH=”/opt /instantclient_10_2″,而在這個目錄下有大量的*.so文件,這些應(yīng)該對應(yīng)native;
3)至于jni-stub是一些存根文件,可以參考一下JNI相關(guān)的說明,這里就暫不描述了(有時間可以再深入學(xué)習(xí))。
本文轉(zhuǎn)自 神相 51CTO博客,原文鏈接:http://blog.51cto.com/shenxiang/269201,如需轉(zhuǎn)載請自行聯(lián)系原作者
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”, “..”); java.libaray.path 是system properties,在windows系統(tǒng)通常是使用PATH的值,而在Linux上是用LD_LIBRARY_PATH的值。 隨便也說一下java.class.path,他是對應(yīng)于CLASSPATH中的值。
那LD_LIBRARY_PATH的值主要是干什么呢?他是來處理非標(biāo)準(zhǔn)路徑下的”共享庫“的,可以理解成windows 的dll,但在linux下是*.so的文件。 說完了基本的概念,再來看看OCI是怎么連接Oracle的,其實(shí)OCI是通過JNI(java native interface)的方式來訪問Oracle的,請看下圖
1)我們知道Oracle的驅(qū)動是classes12.jar(ojdbc14.jar),這里應(yīng)該對應(yīng)著java-class;
2)同樣我們在JBOSS啟動腳本中設(shè)置? JBOSS_NATIVE_DIR=”/opt/instantclient_10_2″,其實(shí)就是將LD_LIBRARY_PATH=”/opt /instantclient_10_2″,而在這個目錄下有大量的*.so文件,這些應(yīng)該對應(yīng)native;
3)至于jni-stub是一些存根文件,可以參考一下JNI相關(guān)的說明,這里就暫不描述了(有時間可以再深入學(xué)習(xí))。
本文轉(zhuǎn)自 神相 51CTO博客,原文鏈接:http://blog.51cto.com/shenxiang/269201,如需轉(zhuǎn)載請自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的梦回编程- 由LD_LIBRARY_PATH引发JNI的理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: E-MapReduce上如何升级EMR-
- 下一篇: 阿里云云计算ACP考试知识点(标红为重点