无法在 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
  1. 我使用 JNA 创建了加载存储在“/home/libraryFiles”的本机库的函数。
  2. 我已将所有 libXXXX.so 文件存储在“/home/libraryFiles”。
  3. 我已经从 windows 中的 eclipse 中导出我的 war 文件并将其部署到 redhat linux.
  4. 上的 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”(可能是首选样式)或在第二行中执行相反的操作以匹配。

如评论中所述,您还必须注意相对与绝对文件路径和目录权限。