成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

解析java.library.path和LD_LIBRARY_PATH的介紹與區別

瀏覽:117日期:2022-08-13 08:26:55
背景

近期要將算法部署到一個機群的虛擬主機(Debian 9.1 gcc 6.3.0)上,采用的是Java + JNI + shared library的方式來完成底層算法能力的部署。

其中需要用到各種第三方庫,有從源碼編譯的,也有直接下載的so,包括OpenCV相關、TensorFlow相關、MKL以OpenMP相關的動態庫。

遇到一個問題,libmklml_intel.so 這個庫只能放在 LD_LIBRARY_PATH中進行加載,而不能通過java.library.path完成加載,所以有必要搞清楚這兩個路徑究竟有什么區別。

java.library.path

官方文檔的定義是:List of paths to search when loading libraries從定義我們可以發現,首先是一個list,也就是說可以包括多個地址,然后這些地址是用來幫助jvm搜索需要加載的庫文件的。

設置java.library.path

最簡單的辦法就是在啟動jvm前通過java -Djava.library.path=path-to-your-libs設置這個全局變量。

作用

那么這個地址具體是如何被使用的呢?當我們調用System.loadLibrary(libname)時,會調用Runtime.loadLibary,然后調用java/lang/ClassLoader.loadLibrary。在ClassLoader.loadLibrary中,系統屬性java.library.path將會被獲取,并用來生成需要加載的庫的絕對路徑,然后將這個絕對路徑傳給本地方法來調用dlopen/dlsym并最終加載這個庫。如果加載失敗,會根據實際情況返回三個異常值:

SecurityException − if a security manager exists and its checkLink method doesn’t allow loading of the specified dynamic libraryUnsatisfiedLinkError − if the library does not existNullPointerException − if libname is null

可以參考OpenJDK的倉庫:

static void loadLibrary(Class fromClass, String name, boolean isAbsolute) {ClassLoader loader = (fromClass == null) ? null : fromClass.getClassLoader();if (sys_paths == null) { usr_paths = initializePath('java.library.path'); sys_paths = initializePath('sun.boot.library.path');}if (isAbsolute) { if (loadLibrary0(fromClass, new File(name))) {return; } throw new UnsatisfiedLinkError('Can’t load library: ' + name);}if (loader != null) { String libfilename = loader.findLibrary(name); if (libfilename != null) {File libfile = new File(libfilename);if (!libfile.isAbsolute()) { throw new UnsatisfiedLinkError( 'ClassLoader.findLibrary failed to return an absolute path: ' + libfilename);}if (loadLibrary0(fromClass, libfile)) { return;}throw new UnsatisfiedLinkError('Can’t load ' + libfilename); }}for (int i = 0 ; i < sys_paths.length ; i++) { File libfile = new File(sys_paths[i], System.mapLibraryName(name)); if (loadLibrary0(fromClass, libfile)) {return; }}if (loader != null) { for (int i = 0 ; i < usr_paths.length ; i++) {File libfile = new File(usr_paths[i],System.mapLibraryName(name));if (loadLibrary0(fromClass, libfile)) { return;} }}// Oops, it failedthrow new UnsatisfiedLinkError('no ' + name + ' in java.library.path'); }LD_LIBRARY_PATH

為了搞清楚這個變量的作用,我們先說明一下Unix系統是如何加載動態庫的,然后自然就明白為什么要有LD_LIBRARY_PATH以及如何使用了。

動態庫如何加載?

在基于GNU glibc的系統上,包括所有的linux系統,啟動一個ELF格式的二進制可執行文件會自動調用加載器加載必要的動態鏈接庫,一個最簡單的可執行文件一般也會包含一些系統的動態庫比如libc.so等。在Linux系統中,這個加載器叫做/lib/ld-linux.so.X,這個X指的是加載器的版本號。加載器然后查找并加載所需的動態庫。

加載器在什么路徑中搜索和加載動態庫呢——/etc/ld.so.conf,這個文件會包括/etc/ld.so.conf.d/*.conf這些文件夾中所有的.conf文件,而具體的動態庫搜索路徑,就包含在每個.conf文件中,比如/etc/ld.so.conf.d/libc.conf,它是libc的默認的搜索路徑/usr/local/lib,這也是為什么我們不需要顯示聲明使用系統庫卻能自動完成加載的原因,也是為什么不同的系統編出來的庫無法通用的可見原因之一,因為不同系統的/usr/local/lib目錄下的動態庫并不一致。

如果每次啟動都去查找所有的目錄,那樣顯然是比較笨的做法,所以使用/etc/ld.so.cache來緩存路徑,并通過ldconfig來更新這個緩存路徑,有興趣的可以自行查看一下這個緩存文件。實際上,這個緩存路徑也很長了,基本上包含了系統可能存放動態庫的路徑。

為什么有LD_LIBRARY_PATH?

上面我們說到可以通過cache和ldconfig來簡化搜索和加載動態庫的流程,但是還有兩個問題沒有考慮到,一是還沒有將編出來的庫放到系統目錄中去,二是依賴庫數量很少,不需要經過這么復雜的查找。

LD_LIBRARY_PATH就是用來滿足這個需要,它也指定一個搜索路徑,且ld-linux.so會優先在這個路徑下搜索需要的動態庫,如果沒找到,再去ld.so.conf中指定的目錄尋找。

使用

export LD_LIBRARY_PATH=paths-to-libs

需要注意的一點是,多個目錄是通過:隔開的

區別

前面分別介紹了java.library.path 和 LD_LIBRARY_PATH,都是為了加載所需的動態庫,有什么區別呢?

前者是在java環境中調用,在jvm啟動前設置生效;后者也是在啟動前,但是是在Unix環境中使用前者是通過修改property來設置路徑;后者是直接增加了ld-linux.so的搜索路徑對于JNI直接調用的庫,最好使用前者,對于有多重依賴關系的庫,最好使用LD_LIBRARY_PATH 參考

HowTo: How to configure library path for JNI dependent librarieshttps://zauner.nllk.net/post/0013-jni-and-the-java-library-path/https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#getProperties?https://www.tutorialspoint.com/java/lang/runtime_loadlibrary.htmhttps://stackoverflow.com/questions/27945268/difference-between-using-java-library-path-and-ld-library-pathLinux關于動態庫的文檔

到此這篇關于解析java.library.path和LD_LIBRARY_PATH的介紹與區別的文章就介紹到這了,更多相關java.library.path和LD_LIBRARY_PATH內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
91福利社在线观看| 91一区二区三区在线播放| 狠狠色综合色综合网络| 亚洲欧美久久久| 337p日本欧洲亚洲大胆色噜噜| 国产在线国偷精品产拍免费yy| 91福利在线观看| 日韩中文字幕不卡| 性高湖久久久久久久久| 亚洲另类在线制服丝袜| 亚洲国产网站| 亚洲欧美一区二区三区极速播放| 国产精品v亚洲精品v日韩精品 | 欧美一级二区| 一区二区三区精品在线| 亚洲精品色图| 亚洲三级视频在线观看| 狠狠爱www人成狠狠爱综合网| 国产网站一区二区| 91免费看片在线观看| 精品sm在线观看| 不卡电影一区二区三区| xnxx国产精品| 9色porny自拍视频一区二区| 欧美精品一区二区三| av电影在线观看不卡| 久久综合色之久久综合| 97se狠狠狠综合亚洲狠狠| 久久亚洲欧美国产精品乐播| 成人动漫av在线| 久久久影院官网| 欧美区高清在线| ●精品国产综合乱码久久久久 | 亚洲网址在线| 亚洲欧美一区二区三区久本道91 | 欧美精品xxxxbbbb| 国产成人综合在线播放| 日韩一区二区电影| 成人免费视频app| 国产亚洲美州欧州综合国| 91美女在线看| 亚洲欧美在线aaa| 亚洲制服av| 蜜臀精品一区二区三区在线观看| 欧美婷婷六月丁香综合色| 国产高清在线精品| 国产亚洲va综合人人澡精品| 亚洲国产免费看| 亚洲成人高清在线| 欧洲亚洲精品在线| 国产91丝袜在线播放| 国产日韩欧美精品一区| 一区二区高清| 免费观看91视频大全| 欧美丰满少妇xxxxx高潮对白 | 91视频在线看| 中文字幕一区二区三区乱码在线| 夜夜精品视频| 蜜臀av一区二区在线免费观看 | 国产精品久久九九| 麻豆视频一区二区| 91精品国产黑色紧身裤美女| 欧美a级一区| 亚洲免费视频中文字幕| 一本一本大道香蕉久在线精品| 黄色小说综合网站| 久久久www免费人成精品| 91久久精品国产91久久性色tv| 亚洲成人免费在线| 欧美高清视频www夜色资源网| 91片在线免费观看| 亚洲第一激情av| 在线精品亚洲| 日本欧美加勒比视频| 精品精品国产高清一毛片一天堂| 在线播放豆国产99亚洲| 免费高清在线一区| 26uuu精品一区二区三区四区在线| 亚洲人成久久| 久久99久久99| 国产色一区二区| 久久亚洲美女| 成人va在线观看| 亚洲综合丝袜美腿| 5566中文字幕一区二区电影| 国内视频一区| 精品一二三四区| 中文字幕亚洲精品在线观看| 欧洲日韩一区二区三区| 91麻豆自制传媒国产之光| 亚洲成人1区2区| 欧美精品一区二区久久婷婷 | 26uuu国产在线精品一区二区| 亚洲免费综合| 成人免费高清在线观看| 亚洲自拍偷拍九九九| 日韩天堂在线观看| 国产精品久久久一区二区| 久久精品国产亚洲高清剧情介绍 | 9国产精品视频| 国内成人自拍视频| 中文字幕一区在线观看| 欧美日本在线一区| 精品动漫一区| 国产精品综合久久| 亚洲永久免费av| 亚洲精品一区二区三区香蕉| 亚洲欧美成人| 91丝袜呻吟高潮美腿白嫩在线观看| 亚洲超碰97人人做人人爱| 久久蜜桃一区二区| 欧美三级视频在线| 99国产精品自拍| av在线不卡电影| 日韩高清中文字幕一区| 久久女同性恋中文字幕| 色狠狠色噜噜噜综合网| 国产一区视频观看| 国产一区二区中文字幕| 欧美精品一区二| 色婷婷av久久久久久久| 欧美日韩在线高清| 国产成人亚洲综合a∨猫咪| 亚洲国产成人精品视频| 国产欧美精品一区二区色综合| 欧美日韩成人综合| 亚洲综合丁香| 亚洲调教视频在线观看| 成人av在线播放网站| 麻豆国产精品一区二区三区| 亚洲婷婷综合色高清在线| 精品国产一区二区在线观看| 欧洲精品一区二区| 亚洲永久在线| 伊人天天综合| 欧美 日韩 国产一区二区在线视频 | 欧美日韩国产经典色站一区二区三区| 中日韩男男gay无套| 欧美一区91| 成人精品一区二区三区中文字幕| 看片的网站亚洲| 日韩福利电影在线| 亚洲成a人片在线观看中文| 亚洲丝袜另类动漫二区| 国产欧美日韩久久| 精品久久久久久久人人人人传媒| 欧美男生操女生| 日本精品裸体写真集在线观看| 99伊人成综合| 亚洲无吗在线| 午夜日韩在线| 91碰在线视频| 国产91对白在线观看九色| 久久国产精品99精品国产| 日本美女一区二区三区| 午夜精品一区在线观看| 亚洲国产欧美在线| 亚洲精品大片www| 18涩涩午夜精品.www| 国产精品久久久久久久裸模| 久久嫩草精品久久久精品| 精品免费日韩av| 日韩一区二区三区三四区视频在线观看| 欧美性大战久久久久久久蜜臀| 久久先锋影音| 91福利在线免费观看| 欧洲精品中文字幕| 欧美性大战xxxxx久久久| 欧美午夜不卡在线观看免费| 欧美综合色免费| 欧美日韩一区不卡| 欧美日本一区二区在线观看| 欧美日韩精品一区二区天天拍小说 | 韩日成人在线| 国产在线一区二区三区四区| 欧美日韩免费观看一区| 欧美视频四区| 亚洲第一伊人| 国产精品视区| 鲁大师影院一区二区三区| 亚洲一区在线直播| 久久在线91| 91国内精品野花午夜精品| 在线视频综合导航| 欧美中文字幕久久| 欧美日韩电影在线| 欧美一级xxx| 久久嫩草精品久久久精品一| 国产日韩三级在线| 亚洲人午夜精品天堂一二香蕉| 亚洲人成伊人成综合网小说| 亚洲日本护士毛茸茸| 一个色妞综合视频在线观看| 亚洲一区av在线| 日韩国产精品91| 日韩电影在线一区二区三区| 久久se精品一区二区| 福利一区二区在线| 99r精品视频| 亚洲视频一区|