1. 程式人生 > >夢迴編碼系列- 由LD_LIBRARY_PATH引發JNI的理解

夢迴編碼系列- 由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

System.getProperty("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的檔案。

說完了基本的概念,再來看看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相關的說明,這裡就暫不描述了(有時間可以再深入學習)。

相關推薦

編碼系列 LD_LIBRARY_PATH引發JNI理解

前些天在配置通過OCI的方式連線Oracle中曾進碰到一個關於“java.lang.UnsatisfiedLinkError: no XXX in java.library.path”這麼一個問題,這個問題糾結了許久才解決,解決方式參考前面的文章。 趁雙休日好好的理解一下產生

【源碼閱讀系列】JDK 8 ConcurrentHashMap 源碼分析之 transfer引發的bug

進一步 輸出 _id 更新 com transfer ase put != 不閱讀源碼就不會發現這個事兒 前段時間在閱讀ConcurrentHashMap源碼,版本JDK 8,目前源碼研究已經告一段落。感謝魯道的ConcurrentHashMap源碼分析文章,讀到文章,感覺

【原始碼閱讀系列】JDK 8 ConcurrentHashMap 原始碼分析之 transfer引發的bug

不閱讀原始碼就不會發現這個事兒 前段時間在閱讀ConcurrentHashMap原始碼,版本JDK 8,目前原始碼研究已經告一段落。感謝魯道的ConcurrentHashMap原始碼分析文章,讀到文章,感覺和作者發生了一些交流,解答了很多疑惑,也驗證了一些想法。魯道在簡書的addCount分析文章點這裡&n

React 源碼剖析系列 生命周期的管理藝術

uid 觀察 assign dup 不能 函數 ide 例如 top 目前,前端領域中 React 勢頭正盛,很少能夠深入剖析內部實現機制和原理。 本系列文章 希望通過剖析 React 源碼,理解其內部的實現原理,知其然更要知其所以然。 對於 React,其組件

React引發的前後端分離架構的思考

outer java 模塊 qps ESS etc 降級 red 器) 摘要 以React技術棧為主分享我們在大規模企業應用建設過程中遇到的問題,對前後端分離架構的思考,前後端分離的技術方案,前後端分離過程中的實踐經驗,前後端分離帶來的效果與價值,以及目前存在的問題與未來可

從零系列npm包(一)

node key .com eve http adduser gitlab 倉庫 選擇 一、目的 主要是紀錄和回顧自己開發的一些步驟以及遇到的一些問題和解決方案 二、準備工作 1、IDE 選擇 VS Code 2、安裝node 環境 (https://nodejs.org/

從零系列node爬蟲利用進程池寫數據

存儲 exit titles date [] += port 請求 如果 1、主進程 const http = require(‘http‘); const fs = require(‘fs‘); const cheerio = require(‘cheerio‘); c

Lintcode 系列

比較重要的一個是Manacher演算法O(n)解決最長子迴文串問題。 def longestPalindrome(s): #manacher algorithm s='#'+'#'.join(s)+'#' longest=0

【LeetCode】 【dp】 系列

以下幾題: Leetcode 9. Palindrome Number 給定一個數字,判斷數字是否為迴文數字。 Determine whether an integer is a palindrome. An integer is a palind

Jmeter系列安裝jmeter在Mac

Jmeter系列-安裝jmeter在Mac Step1:官網下載Jmeter 地址:http://jmeter.apache.org/download_jmeter.cgi 官網下載Jmeter S

十年前!韋德卡特賽後這一幕看哭無數球迷

“90後”女大學生放棄北大保送復旦!她到底有多厲害?  東北網12月6日訊(記者 姜姍姍) 在東北農業大學有這樣一個自強不息的女大學生,她放棄北大直博被保送到復旦大學藥學院。她本科期間獲得國家獎學金、國家勵志獎學金、新東方自強獎學金、第一屆全國大學生生命聯賽國家二等獎……被評為黑龍江省“三好學生”。她就是生命

前端讀者 | setTimeout引發的JS引擎執行機制的研究

本文來自 @xiaoyuze88 連結:http://xiaoyuze88.github.io/ 太久沒碰程式碼了,那天想到關於迴圈呼叫setTimeout實現每隔一秒輸出遞增的數的那個問題,搞了搞,發現很多概念模糊了,在此總結下。 所謂的迴圈呼叫setTimeout實現遞增輸出,就是說用for

jRebel引發的Fegin遠端呼叫空指標錯誤

使用jRebel熱部署springboot應用,修改了Fegin呼叫的方法的引數後沒有重啟SpringBoot應用,直接Ctrl + F9,結果每次執行這個Fegin呼叫就報下面的錯誤: org.springframework.web.util.NestedServletE

Hadoop系列Hadoop核心之MapReduce的原理

1 MapReduce核心原理   “分而治之,平行計算”是MapReduce的核心原理,其實也是大資料處理的中心思想。 1.1 分而治之   在MapReduce中,分而治之,就是,    一個任務分成多個小的子任務(map),並行執行後,

Sophix引發的Android熱更新底層原理探索

移動網際網路市場日趨成熟,移動產品研發進入平穩發展階段,這意味著開發者的思維和研發模式也應轉入下半程。安全領域技術在開發中的應用一直是作業系統平臺發展週期中的重要一環。熱修復,作為安全領域技術的衍生品,自2016年開始,持續受到關注,並不斷演進。        2016年上半年,為了提升產品在敏捷開發下的最佳

訊息中介軟體系列JMS基本概念和模型

一、定義: JMS 全稱:Java Message Service,Java訊息服務,是Java EE中的一個技術,它定義了Java 中訪問訊息中介軟體的介面,並沒有給予實現,實現JMS介面的訊息中介軟體成為JMS Provider,例如:Active MQ 二、訊息模型

select引發的思考

一、前言   網路程式設計裡一個經典的問題,select,poll和epoll的區別?這個問題剛學習程式設計時就接觸了,當時看了材料很不明白,許多概念和思想沒有體會,現在在這個階段,再重新回頭看這個問題,有一種豁然開朗的感覺, 把目前我所能理解到的記錄下來。

kotlin入門系列第一個kotlin的android demo

  google I/O後瀏覽新聞知道了kotlin已經是Android開發第一語言,很想試試這個新的語言開發有什麼不同。   在Ubuntu上我的Android studio是2.3版本的,因此,先配置kotlin的環境是第一步,在“file”--“setting”搜尋p

SpringJdbc引發的一點思考

本來專案中使用的是Hibernate,後來換Mybatis,但由於專案中很多sql語句是動態的,無實體,引數不固定,列也不固定,Mybatis顯得太重量了,所以我又選擇用spring jdbc這種更輕量的封轉替換掉原來的jdbc,更換dao層真心讓我想吐了。 其實,無論S

訊息中介軟體系列JMS例項(ActiveMQ)

一、ActiveMQ安裝、配置、啟動、視覺化介面 1、安裝 下載地址:http://activemq.apache.org/download.html2、配置(conf目錄下) 1)使用者名稱密碼設定 2)開啟jmx監控 activemq.xml中進行如下修改 注:這裡的配