JNI: библиотека находится на пути, а метод - нет (java.lang.UnsatisfiedLinkError)

Я пытаюсь использовать JNI и получаю java.lang.UnsatisfiedLinkError. В отличие от других миллионов вопросов, заданных о это, у меня есть библиотека на моем пути, и я даже видел изменение исключения, когда я его удаляю. Я уверен, что что-то не так с созданной мной 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);
}

Вот сокращенная часть моего файла заголовка, созданного javah:

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

Вот мой код на 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;
  }

Вот исключение времени выполнения, которое я получаю от 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)

Я читал, что выше исключение означает, что он ДЕЙСТВИТЕЛЬНО нашел t Библиотека «лала», но метод «добавить» до сих пор не определен. Единственное, в чем я вижу разницу между моим проектом и учебным курсом:

  • Мой использует пакет вместо пакета по умолчанию (разве учебники действительно не должны этого делать?!?! Давай перейдем к профессионалам)
    • У меня есть возвращаемое значение.
    • Я переместил свою dll после ее создания (не думаю, что это сломает ее, поскольку мой путь настроен.)

Как это возможно?

Другая информация:

ОС: Windows 7
JDK: 1.6.0_31 (для x86, 32-разрядный jvm)
C ++ IDE: Code :: Blocks (DLL была автоматически скомпилирована IDE Code :: Blocks)
Компилятор C ++: MinGW32-g ++ (компилятор GNU C ++)

У меня есть jni.h и com_Tune.h в C: \ _ \ include
У меня есть lala.dll в C: \ _ \ lib

Переменные среды:
ПУТЬ: C: \ Program Files (x86) \ NVIDIA Corporation \ PhysX \ Common;% CommonProgramFiles% \ Microsoft Shared \ Windows Live; C: \ Program Files (x86) \ AMD APP \ bin \ x86_64; C: \ Program Files ( 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 \ bin; C: \ _ \ include

6
задан msknapp 20 February 2012 в 20:12
поделиться