0

嗨,当我执行我的项目 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;
}

我没有奇怪的行为。谁能指导我解决我的问题?

谢谢

4

0 回答 0