成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_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国内精品久久久久久久
av激情成人网| 欧美精品v国产精品v日韩精品 | 不卡的电影网站| 国产一区二区看久久| 免费看精品久久片| 人人爽香蕉精品| 美女诱惑一区二区| 久99久精品视频免费观看| 美女一区二区久久| 国产乱妇无码大片在线观看| 国内国产精品久久| 国产一区二区视频在线| 国产精品资源站在线| 成人午夜在线免费| 91丨九色丨蝌蚪丨老版| 午夜精品影院| 日韩午夜av| 久久婷婷麻豆| 欧美日韩高清一区二区不卡 | 日本少妇一区二区| 国产揄拍国内精品对白| 成人av电影在线观看| 欧美日韩喷水| 99国产精品久久久久久久成人热| 国产农村妇女毛片精品久久莱园子| 免费视频一区| 8x8x8国产精品| 国产欧美一区二区精品性| 樱桃视频在线观看一区| 亚洲成人三级小说| 国模娜娜一区二区三区| 不卡视频在线看| 亚洲福利久久| 一本久久综合亚洲鲁鲁五月天 | 日本一区二区免费在线观看视频 | 国产乱码精品一区二区三区av| 成人免费高清在线观看| 永久域名在线精品| 在线观看视频一区二区欧美日韩| 欧美成人欧美edvon| 亚洲理论在线观看| 激情五月婷婷综合| 国产精品yjizz| 欧美专区日韩专区| 国产日韩欧美在线一区| 亚洲福利一区二区| 成人免费视频app| 亚洲在线成人| 久久久久久久久久久黄色| 亚洲成人免费在线| eeuss鲁片一区二区三区| 国产伦理一区| 国产亚洲综合在线| 日韩精品欧美精品| 国产精品hd| 欧美人妖巨大在线| 亚洲黄网站在线观看| 国产成人av一区二区| 午夜亚洲精品| 国产精品午夜在线| 国产精品538一区二区在线| 国产精品美女久久久| 欧美mv和日韩mv的网站| 日韩av中文在线观看| 亚洲国产片色| 精品国产污污免费网站入口 | 极品少妇一区二区三区| 6080国产精品一区二区| 亚洲综合在线免费观看| 女生裸体视频一区二区三区| 欧美日韩国产大片| 亚洲妇女屁股眼交7| 红杏aⅴ成人免费视频| 精品成人在线观看| 国产最新精品精品你懂的| 免费在线亚洲欧美| 综合久久综合久久| 91免费版在线看| 欧美一区二区女人| 老司机午夜精品| 欧美在线综合| 亚洲黄色录像片| 午夜日韩福利| 久久中文字幕电影| 国产.精品.日韩.另类.中文.在线.播放| 亚洲一区二区三区精品在线观看| 中文在线一区二区| 欧美国产综合视频| 久久久亚洲国产美女国产盗摄 | 欧美一区二区三区免费| 久久国产精品第一页| 色老头久久综合| 亚洲午夜影视影院在线观看| 日韩视频精品在线观看| 亚洲欧美日韩国产手机在线| 国产精品国产一区二区| 中文字幕第一区第二区| 欧美一区成人| 国产日韩精品一区二区三区在线| 99久久er热在这里只有精品15| 日韩精品在线一区| 成人av资源站| 国产欧美一区二区精品性| 欧美成人综合| 国产午夜亚洲精品不卡| 91丨porny丨首页| 国产日产亚洲精品系列| 欧美在线播放一区二区| 国产精品蜜臀在线观看| 伊人成年综合电影网| 亚洲视频1区2区| 免费在线一区二区| 日韩av中文字幕一区二区三区| 在线视频一区二区三| 久久精品72免费观看| 这里只有精品免费| 99久久精品国产麻豆演员表| 国产日韩欧美激情| 99亚洲伊人久久精品影院红桃| 亚洲小说欧美激情另类| 久久久久一区二区三区| 精一区二区三区| 欧美成人a∨高清免费观看| 色综合久久中文字幕综合网| 国产精品久久三区| 久久成人免费| 国产在线日韩欧美| 日本一区二区三区视频视频| 亚洲精品一区二区三| 日本不卡视频在线| 日韩欧美精品在线视频| 欧美亚韩一区| 日韩av不卡一区二区| 3atv在线一区二区三区| 欧美日韩综合网| 午夜精品久久一牛影视| 欧美一区二区性放荡片| 国产一区清纯| 麻豆精品视频在线观看免费| 久久在线观看免费| 亚洲一区日本| 国产一区二区三区香蕉| 久久精品欧美一区二区三区不卡| 亚洲永久免费| 成人黄色电影在线| 一区二区三区精密机械公司| 欧美三级日本三级少妇99| 欧美一区激情| 蜜桃av一区二区三区| 国产三级欧美三级| 91国偷自产一区二区使用方法| www.av精品| 青青草伊人久久| 中文字幕第一页久久| 精品视频1区2区3区| 亚洲国产精品一区制服丝袜| 麻豆极品一区二区三区| 综合分类小说区另类春色亚洲小说欧美| 日本精品裸体写真集在线观看| 色综合视频在线观看| 老司机精品视频一区二区三区| 国产亚洲制服色| 欧美猛男gaygay网站| 一区二区三区成人精品| 成人免费视频视频在线观看免费| 亚洲最新在线观看| 中文字幕的久久| 91麻豆精品国产91久久久| 国产精品毛片va一区二区三区| 99久久er热在这里只有精品66| 日本三级亚洲精品| 亚洲免费av网站| 久久久久久综合| 678五月天丁香亚洲综合网| 国产日产高清欧美一区二区三区| 不卡影院免费观看| 久久99精品国产麻豆婷婷洗澡| 亚洲精品国产无套在线观| 26uuu国产电影一区二区| 欧美色图激情小说| 久久九九国产| 国产日韩欧美综合精品| 国产精品国产一区二区 | 欧美影院一区二区| 免费日韩av片| 在线亚洲激情| 一区二区三区av| 国产真实久久| 91欧美激情一区二区三区成人| 国产一区二区三区不卡在线观看 | 老汉av免费一区二区三区| 午夜精品久久久久久久99水蜜桃| 日韩一区在线看| 国产精品欧美久久久久无广告 | 国产98色在线|日韩| 乱中年女人伦av一区二区| 人禽交欧美网站| 日韩精品免费视频人成| 亚洲国产精品一区二区尤物区| 亚洲三级久久久|