linux环境下Jnative使用报org.xvolks.jnative.exceptions.NativeException
最近做一个项目: 使用jnative调用动态库(.dll或.a文件),在windows环境下,能够完成dll动态库的调用,但是放到linux下面,改用.a文件格式的动态,jnative在linux下使用的libJNativeCpp.so已经放入/usr/lib路径下,调用时就发生异常:
org.xvolks.jnative.exceptions.NativeException: Library /opt/finger/lib/libBLServerAPI.a not found : /opt/finger/lib/libBLServerAPI.a: invalid ELF header
at org.xvolks.jnative.JNative.nLoadLibrary(Native Method)
at org.xvolks.jnative.JNative.<init>(JNative.java:348)
at org.xvolks.jnative.JNative.<init>(JNative.java:269)
at finger.UserCall.verifyMatch(UserCall.java:55)
at finger.FingerAction.authFinger(FingerAction.java:230)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
代码如下:
public int verifyMatch(String fingerAuth, String fingerSign, int matchResult)
throws NativeException, IllegalAccessException {
JNative Something = null;
if (Something == null) {
Something = new JNative("/opt/finger/lib/libBLServerAPI.a", "BLM_VerifyMatch");
// 利用org.xvolks.jnative.JNative 来装载 libBLServerAPI.a BLModuleServerAPI
// FNetSDK_Client.dll,并利用其BLM_OpenModule方法
Something.setRetVal(Type.INT);
// 指定返回参数的类型
}
int i = 0;
Pointer fingerAuthPointer = creatCharPointer();
Pointer fingersignPointer = creatCharPointer();
Pointer resultPointer = creatPointer();
fingerAuthPointer.setMemory(Base64.decode(fingerAuth));
fingersignPointer.setMemory(Base64.decode(fingerSign));
Something.setParameter(i++, fingerAuthPointer);
Something.setParameter(i++, fingersignPointer);
Something.setParameter(i++, resultPointer);
Something.invoke();// 调用方法
return resultPointer.getAsInt(0);
}
请哪位高手知道这是什么问题啊?