java - 从 .so 在 tomcat 中调用 Java 中的 native 库时出错

标签 java tomcat native

我编写了一个独立的 Java 程序(可行),它通过生成 libipmi_agent.so 库调用从 C 程序创建的 native 库,但是在 tomcat 的网络应用程序中运行它是给出以下错误:

native library call java.lang.reflect.InvocationTargetException
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
...
java.lang.UnsatisfiedLinkError: org.qcri.power.util.IPMIAgent.ipmi_agent_init()I 
    org.qcri.power.util.IPMIAgent.ipmi_agent_init(Native Method)
    org.qcri.power.util.IPMIAgent.main(IPMIAgent.java:18)
...

这是我的 Java 类:

package org.qcri.power.util;

public class IPMIAgent
{
  private native int ipmi_agent_init();
  private native void ipmi_agent_close();
  private native int ipmi_agent_read_current_value();
  static
    {
      System.loadLibrary("ipmi_agent");
    }

  // The main program
  public static int main(String[] args)
    {
        int i, v=0;
        IPMIAgent ipmiagent = new IPMIAgent();
        ipmiagent.ipmi_agent_init();
        for (i = 0; i < 100; i++)
        {
          try{
          v = ipmiagent.ipmi_agent_read_current_value();
          System.out.println("Current value is " + v);
          Thread.currentThread().sleep(1000);
          }
          catch(InterruptedException ie){
          }
        }
        return v;
    }
}

libipmi_agent.so 与上面的 Java 类在同一类文件夹中/webapps/myapp/WEB_INF/classes 下。

文件的位置是否正确?有人有想法吗?

提前致谢。

最佳答案

错误告诉您它找不到库,所以不,那个位置不正确。

http://wiki.apache.org/tomcat/HowTo#I.27m_encountering_classloader_problems_when_using_JNI_under_Tomcat

(FAQ中的错误是不同的,但问题是一样的,那里的解决方案应该可以解决你的问题)

关于java - 从 .so 在 tomcat 中调用 Java 中的 native 库时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7728442/

相关文章:

javascript - Safari/webapp 启动 native 应用程序 iOS

c++ - 使用窗口 native API 创建 GUI

java - 从 InputStream 解码

java - 如何使用 JavaFX 强制使用 gpu?

java - Structure.ByValue 对象用作结构字段时无法正常工作

tomcat - 'Failed shutdown of Apache Portable Runtime' 日志消息是什么意思?

java - Web 服务安全 : Client signs SOAP message (Tomcat)

java - CAS 身份验证 - UrlRewriteFilter 使 request.getRemoteUser() 无效

java - awt.TrayIcon 是否可以区分双击托盘图标和关闭气球消息?

java - 如何在 Windows 中使用 Java Native (cacls) 更改文件权限