Java libmodbus本机库不满足于LinkError

时间:2013-04-12 19:59:24

标签: java linux java-native-interface modbus

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

lib在我的道路上。我也尝试过绝对路径,但没有任何安慰。但是当我运行一个带有相同共享库的小型测试程序时,它运行正常。但当我将它包含在我的项目中时,它会产生异常。我不知道为什么它表现得很奇怪。

这是我的文件

JNI Java Class ::

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;
}

我没有得到这种奇怪的行为。任何人都可以指导我解决我的问题吗?

谢谢

0 个答案:

没有答案