我正在使用一个java应用程序,它在windows中的java.library.path中需要一个.dll
文件。要在Linux中运行相同的应用程序,我有相应的.so
文件应该添加到linux机器中的java.library.path
,到目前为止我找不到任何简单的解决方案
我确实将.so
放在已经在类路径中的文件夹中,但我的应用程序仍抱怨.so
java.library.path
文件
我想找到:
.so
添加到java.library.path
答案 0 :(得分:58)
在启动应用程序之前将包含目录添加到LD_LIBRARY_PATH
export LD_LIBRARY_PATH = $LD_LIBRARY_PATH:/some/pathOfContainingDirectory
使用java -XshowSettings:properties
显示java.library.path(及其他)值。
答案 1 :(得分:6)
我在解决此问题时遇到了很多麻烦,请确保您在库名称中有lib
前缀。
步骤,
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/some/pathOfContainingDirectory"
重命名库以将lib作为前缀。 [将其添加为构建脚本的一部分]
mv JNIDemo.so libJNIDemo.so
检查此答案以获取详细说明https://stackoverflow.com/a/3987567/2076566
答案 2 :(得分:3)
我使用了java -XshowSettings:properties方法,找到了先前设置的文件夹的路径,并将我的so文件复制到该文件夹
答案 3 :(得分:0)
File file = null;
private String[] libs_path = System.getProperty("java.library.path").split(":");
public boolean isInstalled() {
boolean isInstalled = false;
for(String lib : libs_path) {
file = new File(lib+"/"+"yourlib.so");
if(file.exists()) {
isInstalled = true;
break;
}
}
return isInstalled;
}
public void install() {
if(!isInstalled) {
for(String lib: lib_path) {
// copy your .so to lib
break;
}
}
}
答案 4 :(得分:0)
我相信这是一种更好的方法,因为它只需要创建一个链接,无需文件编辑,在应用程序运行前无需导出或运行源代码。不需要bashrc行。
也就是说,如果升级它,可能会导致将来的Java版本出现意外错误,因为它可能会加载过时的库,尽管删除一个链接也可以解决此问题。
这在ubuntu 18.04下工作并安装了Java 11 opensdk。
$ locate libjawt.so
$ java -XshowSettings:properties
从上面的两个命令中,您可以找到将其调整到自己的系统所需的两条路径。
sudo ln -s /path/from/locate/libjawt.so /path/from/properties/libawt.so
我为java ll打开sdk创建了一个符号链接,以查找该库,而我的代码如下,因为/ usr / lib是输出中的路径之一。如果希望将Java库(甚至符号链接)保持在一起,则可以在我的输出中使用一个Java路径来代替/ usr / lib。
sudo ln -s /usr/lib/jvm/java-11-openjdk-amd64/lib/libjawt.so /usr/lib/libjawt.so