无法在 redhat linux 上的 jboss 服务器上加载库 (libFile.so)
Unable to load library (libFile.so) on jboss server on redhat linux
我在尝试 运行 网络应用程序时收到不满意的 link 错误。
Suppressed: java.lang.UnsatisfiedLinkError: libXXXX.so: cannot open shared object file: No such file or directory
at deployment.ttt.war//com.sun.jna.Native.open(Native Method)
at deployment.ttt.war//com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:191)
... 74 more
Suppressed: java.lang.UnsatisfiedLinkError: libXXXX.so: cannot open shared object file: No such file or directory
at deployment.ttt.war//com.sun.jna.Native.open(Native Method)
at deployment.ttt.war//com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:204)
... 74 more
Suppressed: java.io.IOException: Native library (linux-x86-64/libXXXX.so) not found in resource path (/opt/jboss-eap-7.3/jboss-modules.jar)
at deployment.ttt.war//com.sun.jna.Native.extractFromResourcePath(Native.java:1095)
at deployment.ttt.war//com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:275)
... 74 more
- 我使用 JNA 创建了加载存储在“/home/libraryFiles”的本机库的函数。
- 我已将所有 libXXXX.so 文件存储在“/home/libraryFiles”。
- 我已经从 windows 中的 eclipse 中导出我的 war 文件并将其部署到 redhat linux.
上的 jboss 服务器上
这是我的功能:
public class function1(){
public interface CLibrary extends Library {
public int method1(String message);
}
public int execute (String param) throws Exception{
NativeLibrary.addSearchPath("libXXXX", "home/libraryFiles");
CLibrary pLib =(CLibrary)Native.loadLibrary("XXXX",CLibrary.class);
return pLib.method1(param);
}
}
我正在通过 rest controller 映射 url 来执行
new function1().execute("aaaaaaa");
我也试过将jna.library.path & java.library.path设置为“home/libraryFiles”,但没有用。 (using system.setProperty())
我也试过 set $LD_LIBRARY_PATH=home/libraryFiles
但还是不行。
似乎我的网络应用无法指出默认资源路径“/opt/jboss-eap-7.3/jboss-modules.jar”
欢迎任何帮助。
PS :
我在我的 windows PC 上尝试了相同的 function/code,它工作正常。我不知道为什么它不能在 redhat linux.
上运行
提前致谢。
addSearchPath()
方法特定于库,附加路径存储在以库名称为键的映射中。
loadLibrary()
方法使用库名称检查映射。
您使用了不同的字符串作为存储和检索路径的键:
NativeLibrary.addSearchPath("libXXXX", "home/libraryFiles");
CLibrary pLib =(CLibrary)Native.loadLibrary("XXXX",CLibrary.class);
您应该将第一行中的“libXXXX”更改为“XXXX”(可能是首选样式)或在第二行中执行相反的操作以匹配。
如评论中所述,您还必须注意相对与绝对文件路径和目录权限。
我在尝试 运行 网络应用程序时收到不满意的 link 错误。
Suppressed: java.lang.UnsatisfiedLinkError: libXXXX.so: cannot open shared object file: No such file or directory
at deployment.ttt.war//com.sun.jna.Native.open(Native Method)
at deployment.ttt.war//com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:191)
... 74 more
Suppressed: java.lang.UnsatisfiedLinkError: libXXXX.so: cannot open shared object file: No such file or directory
at deployment.ttt.war//com.sun.jna.Native.open(Native Method)
at deployment.ttt.war//com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:204)
... 74 more
Suppressed: java.io.IOException: Native library (linux-x86-64/libXXXX.so) not found in resource path (/opt/jboss-eap-7.3/jboss-modules.jar)
at deployment.ttt.war//com.sun.jna.Native.extractFromResourcePath(Native.java:1095)
at deployment.ttt.war//com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:275)
... 74 more
- 我使用 JNA 创建了加载存储在“/home/libraryFiles”的本机库的函数。
- 我已将所有 libXXXX.so 文件存储在“/home/libraryFiles”。
- 我已经从 windows 中的 eclipse 中导出我的 war 文件并将其部署到 redhat linux. 上的 jboss 服务器上
这是我的功能:
public class function1(){
public interface CLibrary extends Library {
public int method1(String message);
}
public int execute (String param) throws Exception{
NativeLibrary.addSearchPath("libXXXX", "home/libraryFiles");
CLibrary pLib =(CLibrary)Native.loadLibrary("XXXX",CLibrary.class);
return pLib.method1(param);
}
}
我正在通过 rest controller 映射 url 来执行
new function1().execute("aaaaaaa");
我也试过将jna.library.path & java.library.path设置为“home/libraryFiles”,但没有用。 (using system.setProperty())
我也试过 set $LD_LIBRARY_PATH=home/libraryFiles
但还是不行。
似乎我的网络应用无法指出默认资源路径“/opt/jboss-eap-7.3/jboss-modules.jar”
欢迎任何帮助。
PS : 我在我的 windows PC 上尝试了相同的 function/code,它工作正常。我不知道为什么它不能在 redhat linux.
上运行提前致谢。
addSearchPath()
方法特定于库,附加路径存储在以库名称为键的映射中。
loadLibrary()
方法使用库名称检查映射。
您使用了不同的字符串作为存储和检索路径的键:
NativeLibrary.addSearchPath("libXXXX", "home/libraryFiles");
CLibrary pLib =(CLibrary)Native.loadLibrary("XXXX",CLibrary.class);
您应该将第一行中的“libXXXX”更改为“XXXX”(可能是首选样式)或在第二行中执行相反的操作以匹配。
如评论中所述,您还必须注意相对与绝对文件路径和目录权限。