JNI用Java链接

时间:2015-12-04 01:25:47

标签: java c++ java-native-interface jna

我创建了一个C ++函数来添加两个数字:

#include <iostream>
extern "C" __declspec(dllexport) 
int add (int x, int y)
{
    return x + y;
}

并使用Java创建了两个使用JNA访问它的类:

package jniTest;
public class jnitest {
    public static void main(String[] args) {

        System.setProperty("java.library.path", "C:/cygwin/home/abc");
        System.loadLibrary("add");

        importClass lib = importClass.INSTANCE;
        System.out.println(lib.add(10, 20));
    }
}

主要测试类:

package jniTest;

import com.sun.jna.Library;
import com.sun.jna.Native;

public interface importClass extends Library
{
    importClass INSTANCE = (importClass) Native.loadLibrary("add", importClass.class);
    int add(int x, int y);
}

我收到以下错误: &#34;线程中的异常&#34; main&#34; java.lang.UnsatisfiedLinkError:java.library.path中没有添加 &#34;

1 个答案:

答案 0 :(得分:0)

我相信你的大部分问题都是由于认为你直接使用JNI而不是JNA而在评论中引起的。

由于您使用的是JNA,因此您应该设置jna.library.path而不是java.library.path,并且不应该像直接使用JNI那样调用System.loadLibrary()。

将您的主班级更改为:

package jniTest;
public class jnitest {
    public static void main(String[] args) {

        // changed java to jna in next line.
        System.setProperty("jna.library.path", "C:/cygwin/home/abc");
        // remove this line System.loadLibrary("add");

        importClass lib = importClass.INSTANCE;
        System.out.println(lib.add(10, 20));
    }
}