問題說明
項目背景:項目啟動的時候,通過System.loadLibrary("XXX")加載so庫文件。
問題場景:tomcat啟動的時候,localhost.log文件報錯,java.lang.UnsatisfiedLinkError:no XXX in java.library.path。
問題分析:通過報錯信息定位到項目啟動的時候加載不到so庫文件,so庫文件放在jdk/jre/lib目錄下面,考慮so庫文件所在的目錄沒有設(shè)置到j(luò)ava.library.path路徑下面。
什么是java.library.path
PATH:是系統(tǒng)環(huán)境變量,聲明命令搜索的路徑,讓操作系統(tǒng)找到指定的工具程序;
-classpath:Java執(zhí)行環(huán)境找到指定的Java程序?qū)?yīng)的class文件以及程序中引用的其他class文件;
-Djava.library.path:指定非Java類包的位置(如:dll,so等)。
如何配置java.library.path
? ? ????在Windows系統(tǒng)中,通過環(huán)境變量進行設(shè)置,Linux系統(tǒng)中,通過修改環(huán)境變量文件,并且要在修改之后source環(huán)境變量文件使之生效,source之后,需要斷開shell并重新連接之后進行服務(wù)啟動操作。
Java8之前版本配置
Windows:PATH
Linux:LD_LIBRARY_PATH
Mac:DYLD_LIBRARY_PATH
Java8之后版本配置
Windows:PATH
Linux:LD_LIBRARY_PATH
Mac:JAVA_LIBRARY_PATH
在類unix系統(tǒng)中設(shè)置環(huán)境變量的例子:
```
#vi /etc/profile
export?LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/java/jre/lib
#source /etc/profile
```
可以通過命令 #echo $LD_LIBRARY_PATH 查看設(shè)置之后的值。