如何在Linux中将.so文件添加到java.library.path
我正在使用一个Java应用程序,该应用程序需要Windows中java.library.path中的.so文件。 要在Linux中运行相同的应用程序,我有相应的java.library.path文件,应将其添加到Linux机器中的java.library.path中,到目前为止,我没有找到任何简单的解决方案
我确实将.so放在了已经在类路径中的文件夹中,但是我的应用程序仍然抱怨java.library.path中没有必需的java.library.path文件
我想找到:
将.so添加到java.library.path的方法
如何知道它是否已经添加(添加时)
5个解决方案
61 votes
启动应用程序之前,将包含目录添加到java -XshowSettings:properties
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/some/pathOfContainingDirectory
使用java -XshowSettings:properties显示java.library.path(及其他)值。
Jose Luis Martin answered 2020-07-31T08:42:33Z
6 votes
我在解决这个问题时遇到了很多麻烦,请确保您在库名称中具有mv JNIDemo.so libJNIDemo.so前缀。
所以,
mv JNIDemo.so libJNIDemo.so
重命名库以lib为前缀。 [将其作为构建脚本的一部分添加]
mv JNIDemo.so libJNIDemo.so
检查此答案以获取详细说明[https://stackoverflow.com/a/3987567/2076566]
teardrop answered 2020-07-31T08:43:07Z
3 votes
我使用java -XshowSettings:properties方法,找到了先前设置的文件夹的路径,并将我的so文件复制到了该文件夹
Ravindu answered 2020-07-31T08:43:27Z
0 votes
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;
}
}
}
Ardika Rommy Sanjaya answered 2020-07-31T08:43:43Z
0 votes
我认为这是一种更好的方法,因为它只需要创建一个链接,无需文件编辑,在应用程序运行之前无需导出或运行源代码。 而且不需要bashrc行。
就是说,如果您升级它,可能会导致将来的Java版本意外错误,因为它可能会加载过时的库,尽管删除一个链接也可以解决此问题。
这在安装了Java 11 opensdk的ubuntu 18.04下工作。
$ locate libjawt.so
$ java -XshowSettings:properties
从上面的两个命令中,您可以找到将其调整到自己的系统所需的两条路径。
sudo ln -s /path/from/locate/libjawt.so /path/from/properties/libawt.so
我为java ll open sdk创建了一个符号链接,以找到该库,而我的代码如下,因为/ usr / lib是输出中的路径之一。 如果要将Java库(甚至符号链接)保持在一起,则可以在我的输出中选择一个Java路径来代替/ usr / lib。
sudo ln -s /usr/lib/jvm/java-11-openjdk-amd64/lib/libjawt.so /usr/lib/libjawt.so
Chris answered 2020-07-31T08:44:21Z