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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Компиляция dll для подключения к Java, При компиляции возникает ошибка 
:(
    Опции темы
Гость_Александр
Дата 10.12.2005, 03:06 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Господа, стоит задача подключить dll к java программе.

Посмотрел материалы, очевидно надо использовать Java JNI

Сначала компилю файлик SolveLU.java из следующего исходника
Код


public class SolveLU 
{
    public native int RLU_nn(int n, double a[], double b[], double x[]);
    static 
    {
        System.loadLibrary("solve");
    }
    
}



Затем создаю SolveLU.class с помощью javac.

После этого генерю header file SolveLU.h с помощью javah

Код

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class SolveLU */
#ifndef _Included_SolveLU
#define _Included_SolveLU
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     SolveLU
 * Method:    RLU_nn
 * Signature: (I[D[D[D)I
 */
JNIEXPORT jint JNICALL Java_SolveLU_RLU_1nn
  (JNIEnv *, jobject, jint, jdoubleArray, jdoubleArray, jdoubleArray);

#ifdef __cplusplus
}
#endif
#endif



После чего пытаюсь из этого header'a и нижестоящего кода cpp скомпилить dll.

Solve cpp

Код

#include <jni.h>
#include "SolveLU.h"
#include <math.h>
#define  Pii *(p+(i-1)*n+i-1)
#define  Pij *(p+(i-1)*n+j-1)
#define  Uki *(u+(k-1)*n+i-1)
#define  Ukj *(u+(k-1)*n+j-1)
#define  Uii *(u+(i-1)*n+i-1)
#define  Uij *(u+(i-1)*n+j-1)
int XL(int PrTr, int n, double eps, double *p, double *u);
int RXL(int n, double *u, double *b, double *x);

JNIEXPORT jint JNICALL Java_SolveLU_RLU_1nn
  (JNIEnv *env, jobject obj, jint nn, jdoubleArray a, jdoubleArray b, jdoubleArray x)
{
  int ko=0;
  int i,n;
  jdouble tau, u[100];

  double *ata = (double*)env->GetDoubleArrayElements(a, 0);
  double *atb = (double*)env->GetDoubleArrayElements(b, 0);
  double *dx = (double*)env->GetDoubleArrayElements(x, 0);
  tau=0.121e-5;
  ko = XL(1,nn,tau,ata,u);
  RXL(nn,u,atb,dx);
    
  env->ReleaseDoubleArrayElements(x, dx, 0);
  env->ReleaseDoubleArrayElements(a, atb, 0);
  env->ReleaseDoubleArrayElements(b, ata, 0);
        
  return(ko);

}
int   XL(int PrTr, int n, double eps, double *p, double *u)
{
 double Vi,Ui,s;
 int i,j,k,ko;
 ko=0;
 if (eps==0.0)  eps=0.1e-13;
 for (i=1;i<=n;i++)
 {
    s=0.0;
    if(i>1)
    {
        for (k=1;k<=i-1;k++)
          {
           s=s+Uki*Uki;
         }
    }
    Vi=Pii-s;
    if(fabs(Vi)>eps)
    {
      Uii=sqrt(Vi); Ui=1.0/Uii;
    }
    else
    {
       ko++;
       Uii=0.0; Ui=0.0;
    }
    for (j=i+1;j<=n;j++)
    {
       s=0.0;
    if(i>1)
    {
        for (k=1;k<=i-1;k++)
     {
          s=s+Uki*Ukj;
        }
      }
      Uij=(Pij-s)*Ui;
    }

  }
  if(PrTr==1)
  {
    for(i=0;i<n;i++)
     for(j=i;j<n;j++)
     {
       u[j*n+i]=u[i*n+j];
     }
  }
  return(ko);
}

int  RXL(int n, double *u, double *b, double *x)
{
  int i,j;
  double y[12],z;
  for(i=0;i<n;i++)
  y[i]=0.0;
  for(i=0;i<n;i++)
  {
    z=0.0;
     if (i>0)
     {
       for(j=0;j<i;j++)
         {
        z=z+y[j]*(*(u +i*n+j));
       }
     }
    z=*(b + i) -z;
    if(u[i*n+i]==0.0)
    {y[i]=0.0;}
      else {y[i]=z/(*(u + i*n+i));}
  }
  for(i=0;i<n;i++)
    x[i]=0.0;
   for(i=n-1;i>=0;i--)
   {
     z=0.0;
     if (i<(n-1))
     {
        for(j=n-1;j>i;j--)
        {
          z=z+x[j]*(*(u + i*n+j));
        }
     }
     z=y[i]-z;
     if((*(u +i*n+i))==0.0)
     {
       *(x +i)=0.0;
     }
     else
     {
       *(x +i)=z/(*(u + i*n+i));
     }
   }
  return(0);
}



В результате компилятор выводит ошибку

fatal error C1010: unexpected end of file while looking for precompiled header directive
smile

Заранее спасибоsmile



  Вверх
Metal_Heart
Дата 13.12.2005, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а почему бы и нет?
**


Профиль
Группа: Участник
Сообщений: 728
Регистрация: 31.3.2005
Где: Москва

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



попробуй указать путь к jni

пример:
Код

#include <C:\java\jdk1.5.0_03\include\jni.h>




--------------------
 не стыдно учиться, а стыдно не учиться 
PM ICQ   Вверх
AntonSaburov
Дата 13.12.2005, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Либо при компиляции указать каталог, где лежит нужный хидер.
А можно еще статью в FAQ посмотреть - http://vingrad.ru/JAVA-JAVA-001971
PM MAIL WWW ICQ   Вверх
Void
Дата 13.12.2005, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

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



Цитата
В результате компилятор выводит ошибку

fatal error C1010: unexpected end of file while looking for precompiled header directive

Ошибка не имеет к JNI никакого отношения - это внутренние дела VC++.
MSDN
Добавьте в начало файла #include "stdafx.h" и будет щастье.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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