我編寫了一個獨立的Java程序(THAT WORKS),它通過生成libipmi_agent.so lib來調用從C程序創建的本地庫,但在web應用程序在Tomcat是給下面的錯誤:在tomcat中從.so調用Java中的本地庫時出錯
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類在同一個類文件夾/ web應用/ MyApp的/ WEB_INF /類。
該文件的位置是否正確?任何人有一個想法?
在此先感謝。
感謝您的回覆! 我實際上遵循了這個指南並創建了$ CATALINA_HOME/shared/lib目錄並且只有.so文件和java類...是否足夠,甚至是由javah生成的c類和頭文件必須在那裏? 另外$ LD_LIBRARY_PATH指向$ CATALINA_HOME/shared/lib。 任何想法是什麼? – mzereba