【问题标题】:Exception in thread "main" java.lang.UnsatisfiedLinkError:ro.i2c.mirela.board.i2cJNI.U2C_OpenDevice(J)J线程“main”中的异常 java.lang.UnsatisfiedLinkError:ro.i2c.mirela.board.i2cJNI.U2C_OpenDevice(J)J
【发布时间】:2014-06-11 04:46:22
【问题描述】:

我有这些 java 文件:

//i2cjni.java

public class i2cJNI {
static {
    try {
        System.loadLibrary("i2cbrdg");
    }
    catch(UnsatisfiedLinkError e) {
        System.err.println("Native code library failed to load. \n" + e);
        System.exit(1);
    }
}

public final static native long U2C_GetDeviceCount(); public final static native long U2C_OpenDevice(long jarg1); public final static native long U2C_CloseDevice(long jarg1); ... }

//i2c.java

public class i2c {
public static SWIGTYPE_p_BYTE U2C_GetDeviceCount() {
return new SWIGTYPE_p_BYTE(i2cJNI.U2C_GetDeviceCount(), true);

}

//I2CBoard.java

public class I2CBoard extends i2c{

public static void main(String[] args) {

    SWIGTYPE_p_BYTE nDevice = new SWIGTYPE_p_BYTE();
    i2c.U2C_OpenDevice(nDevice);
    SWIGTYPE_p_BYTE mDevice = i2c.U2C_GetDeviceCount();
    System.out.println("mDevice: " + mDevice);
    }

}

-我已经这样设置了原生库路径:

i2c_wrapper/Native library location: ro.i2c.mirela/os/x86_64
 and in the same way to the rest of them: JRE System Library, Plug-in Dependencies, ro.i2c.mirela/os(class folder) and i2c_wrapper

-我已将此文件夹添加到项目中:

os/x86_64/i2c_wrapper.dll
os/x86_64/i2cbrdg.dll
os/x86_64/U2CCommon.dll

-当我尝试调用 U2C_GetDeviceCount() 函数等时,我收到此错误。有任何想法吗?

Exception in thread "main" java.lang.UnsatisfiedLinkError: ro.i2c.mirela.board.i2cJNI.U2C_OpenDevice(J)J
at ro.i2c.mirela.board.i2cJNI.U2C_OpenDevice(Native Method)
at ro.i2c.mirela.board.i2c.U2C_OpenDevice(i2c.java:28)
at ro.i2c.mirela.board.I2CBoard.main(I2CBoard.java:8)

【问题讨论】:

    标签: java eclipse-rcp rcp


    【解决方案1】:

    that like 是一个链接错误,可能是你的 .c 文件函数名不对,也许你应该发布你的 .c 文件

    【讨论】:

    • 我使用 SWIG 来包装 i2cbridge.h 文件并从 i2c_wrap.cxx (pastie.org/9119331) 获得 i2c_wrapper.dll 文件; P.S.如果链接失效,请告诉我。
    • 当你使用jni时,你应该使用java的工具Javah构建一个.h文件,然后改变你在java文件中的.c文件的功能。在这种情况下你应该使用Javah和i2cjni.java 构建一个 i2cjni.h
    • 对不起,你能说得更具体点吗?我的源代码是用 c++ 编写的(我只有一个 dll 文件、一个 lib 文件和 ah 文件),我想在 java 中调用该 c++ 函数。为此,我使用 SWIG 来包装该 c++ 函数,所以在 final 中,我有java文件和一个wrapp.dll,但我还不能调用用c++编写的函数,仍然有这个错误。非常感谢。
    • 我从你那里了解到的是从 c++ 文件中的 java 文件返回,但我不想要这个。
    • 已解决,我已经将所有java文件放在eclipse的默认包中,现在它从dll loadlibrary中找到我的函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 2018-03-27
    • 1970-01-01
    相关资源
    最近更新 更多