嗨,当我执行我的项目 jar 时,我得到以下信息。
java -Djava.library.path=. -jar RDC.jar
Exception in thread "main" java.lang.UnsatisfiedLinkError: com.enfragy.rdc.main.ModbusNativeReader.readInputRegisters(III)[I
at com.enfragy.rdc.main.ModbusNativeReader.readInputRegisters(Native Method)
at com.enfragy.rdc.main.ModbusReader.getInputRegisterValue(ModbusReader.java:14)
at com.enfragy.rdc.main.RdcExecutor.main(RdcExecutor.java:70)
该库在我的路径中。我也尝试过绝对路径,但没有任何安慰。但是当我运行一个具有相同共享库的小型测试程序时,它运行良好。但是当我将它包含在我的项目中时,它会产生异常。我不知道为什么它表现得很奇怪。
这是我的文件
JNI Java 类 ::
public class ModbusNativeReader {
static {
System.loadLibrary("adder");
}
// A native method that receives nothing and returns void
public native int[] readInputRegisters(int slaveId, int registerAddr, int registerCount);
}
C 代码的头文件
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_enfragy_rdc_main_ModbusNativeReader */
#ifndef _Included_com_enfragy_rdc_main_ModbusNativeReader
#define _Included_com_enfragy_rdc_main_ModbusNativeReader
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_enfragy_rdc_main_ModbusNativeReader
* Method: readInputRegisters
* Signature: (III)[I
*/
JNIEXPORT jintArray JNICALL Java_com_enfragy_rdc_main_ModbusNativeReader_readInputRegisters
(JNIEnv *, jobject, jint, jint, jint);
#ifdef __cplusplus
}
#endif
#endif
本机 C 代码
JNIEXPORT jintArray JNICALL Java_com_enfragy_rdc_main_ModbusNativeReader_readInputRegisters
(JNIEnv *env, jobject thisObj, jint slaveId, jint registerAddr, jint registerCount)
{
jintArray result;
modbus_t *ctx;
uint16_t tab_reg[10];
int rc;
int i;
result = (*env)->NewIntArray(env, 2);
if (result == NULL) {
return NULL; /* out of memory error thrown */
}
...
...
(*env)->SetIntArrayRegion(env, result, 0, 2, pointer);
return result;
}
我没有奇怪的行为。谁能指导我解决我的问题?
谢谢