Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JNI: порядок действий, проблемы при исполнении 
V
    Опции темы
Invisible
Дата 18.8.2010, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 26.5.2005

Репутация: нет
Всего: нет



Прочитал про JNI, не могу понять в чем дело. Даже на простейших операциях не получается.

Ошибка такова:
Цитата

Exception in thread "main" java.lang.UnsatisfiedLinkError: JniTest.showString()V
    at JniTest.showString(Native Method)
    at JniTest.<init>(JniTest.java:11)
    at ShowJniTest.main(ShowJniTest.java:9)


Код

public class ShowJniTest {

    /**
     * @param args
     */
    public static void main(String[] args) {        
        JniTest jt = new JniTest();
        System.out.println("Done");
    }

}


Код

public class JniTest  
{
    static 
    {
        System.loadLibrary("JniTestImp");               
    }
    
    public JniTest() {        
        showString();
    }
    
    
    private native void showString(); 
}


Код

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class JniTest */

#ifndef _Included_JniTest
#define _Included_JniTest
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     JniTest
 * Method:    showString
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_JniTest_showString
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif


Код

#include "JniTest.h"         /* Generated earlier. */


void Java_JniTest_showString (){
    printf ("%s \n", "A string");
} 


Команды выполнял такие:

Цитата

javah JniTest


Цитата

g++ -shared -I C:\Sun\SDK\jdk\include -I C:\Sun\SDK\jdk\include\win32 -o JniTestImp.dll JniTestImp.cpp






Это сообщение отредактировал(а) Invisible - 18.8.2010, 09:56
PM MAIL   Вверх
Kircul
Дата 18.8.2010, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 20.2.2007

Репутация: 6
Всего: 7



Мое предположение: сигнатура функции в С++ коде не совпадает с сигнатурой в заголовочном файле
PM   Вверх
Invisible
Дата 18.8.2010, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 26.5.2005

Репутация: нет
Всего: нет



Вот так поменялЮ скомпилил, переложил.
Код

#include "JniTest.h"         /* Generated earlier. */


JNIEXPORT void JNICALL Java_JniTest_showString(JNIEnv *, jobject){
    printf ("%s \n", "A string");
} 


Все та же ошибка
PM MAIL   Вверх
Kircul
Дата 18.8.2010, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 20.2.2007

Репутация: 6
Всего: 7



Попробуйте System.load("Z:\полный\путь\к\либе\либа.dll"). А вообще что за native компилятор? mingw?
PM   Вверх
Invisible
Дата 18.8.2010, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 26.5.2005

Репутация: нет
Всего: нет



1)System.load("C:\\WINDOWS\\JniTestImp.dll");
пробовал, тоже самое

2)MinGW-5.1.6


PM MAIL   Вверх
Kircul
Дата 18.8.2010, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 20.2.2007

Репутация: 6
Всего: 7



Посмотрите тут. Возможно проблемма с недостающими аттрибутами компиляции нативного кода.
PM   Вверх
Invisible
Дата 18.8.2010, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 26.5.2005

Репутация: нет
Всего: нет



Вот оно как значит, спасибо. Проблема решена. Строка компиляции такова:
Цитата

g++ -Wall -D_JNI_IMPLEMENTATION_ -Wl,--kill-at -I C:\Sun\SDK\jdk\include -I C:\Sun\SDK\jdk\include\win32 -shared  -o JniTestImp.dll JniTestImp.cpp

PM MAIL   Вверх
Invisible
Дата 16.2.2011, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 26.5.2005

Репутация: нет
Всего: нет



Всем привет. Дабы не начинать новую тему спрошу тут:

у меня лежит множество .class файлов в папке. Как мне при помощи javah их всех обработать. Пробовал так:


javah -classpath ".;C:\bin" -d src/jni ru.spb.aes.crypto.*

Не понимает. Illegal package name.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0447 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.