JNI:库是在路径上找到的,但是方法不是(java.lang.UnsatisfiedLinkError)

msk*_*app 6 c++ java java-native-interface codeblocks unsatisfiedlinkerror

我正在尝试使用JNI并获取java.lang.UnsatisfiedLinkError.与其他关于此问题的其他百万问题不同,我在我的路径上有lib,甚至在我删除它时看到异常更改.我确定我创建的DLL有问题,但我不确定是什么.

这是我的java类代码:

package com;

public class Tune {
    static {
        System.loadLibrary("lala");
    }
    public static void main(String[] args) {
        Tune j = new Tune();
        System.out.println("2+6="+j.add(2, 6));
    }
    native public int add(int x,int y);
}
Run Code Online (Sandbox Code Playgroud)

这是我的javah生成的头文件的删节部分:

/*
 * Class:     com_Tune
 * Method:    add
 * Signature: (II)I
 */
JNIEXPORT jint JNICALL Java_com_Tune_add
  (JNIEnv *, jobject, jint, jint);
Run Code Online (Sandbox Code Playgroud)

这是我的c ++代码:

#include <jni.h>
#include <com_Tune.h>

JNIEXPORT jint JNICALL Java_com_Tune_add
  (JNIEnv * env, jobject obj, jint x, jint y) {
    return x+y;
  }
Run Code Online (Sandbox Code Playgroud)

这是我从eclipse获得的运行时异常:

Exception in thread "main" java.lang.UnsatisfiedLinkError: com.Tune.add(II)I
    at com.Tune.add(Native Method)
    at com.Tune.main(Tune.java:9)
Run Code Online (Sandbox Code Playgroud)

我读到上面的异常意味着它DID找到了库"lala",但是仍然没有定义"add"方法.我在项目和教程中看到的唯一不同之处是:

  • 我使用的是一个软件包,而不是默认的软件包(教师不应该这样做吗?!?!来吧让我们专业)
    • 我的回报值.
    • 我创建它之后移动了我的dll(我认为这不会破坏它,因为我的路径已配置.)

这怎么可能?

其他信息:

操作系统:Windows 7
JDK:1.6.0_31(对于x86,32位jvm)
C++ IDE:Code :: Blocks(dll由Code :: Blocks IDE自动
编译)C++编译器:MinGW32-g ++(GNU C++编译器)

我在C:\ _\_ include中有jni.h和com_Tune.h
我在C:\ _\_\lib中有lala.dll

环境变量:
路径:C:\ Program Files(x86)\ NVIDIA Corporation\PhysX\Common;%CommonProgramFiles%\ Microsoft Shared\Windows Live; C:\ Program Files(x86)\ AMD APP\bin\x86_64; C:\程序文件(x86)\ AMD APP\bin\x86;%SystemRoot%\ system32;%SystemRoot%;%SystemRoot%\ System32\Wbem;%SYSTEMROOT%\ System32\WindowsPowerShell\v1.0 \; C:\ Program Files( x86)\ ATI Technologies\ATI.ACE\Core-Static; C:\ Apps;%JAVA_HOME%\ bin; C:\ Program Files\MySQL\MySQL Server 5.5\bin;%MAVEN_HOME%\ bin;%HADOOP_INSTALL%\ bin ; c:\ Program Files(x86)\ Microsoft SQL Server\100\Tools\Binn \; c:\ Program Files\Microsoft SQL Server\100\Tools\Binn \; c:\ Program Files\Microsoft SQL Server\100\DTS\Binn \; C:\ MinGW\bin; C:\ Program Files(x86)\ GnuWin32\bin; C:_\path; C:\ _\_ lib; C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\VC \仓; C:\ _ \包括

Mer*_*nne 1

只是猜测...您的 dll 是否依赖于另一个不在路径上的 dll?MinGW 模块通常依赖于特定的 C 运行时库。