Foros del Web » Programación para mayores de 30 ;) » Java »

Ayuda JNI

Estas en el tema de Ayuda JNI en el foro de Java en Foros del Web. Hola a todos, quiero hacer una dll para poder trabajar con un código que tengo en C desde Java. Esta es la primera vez que ...
  #1 (permalink)  
Antiguo 02/02/2009, 08:44
 
Fecha de Ingreso: marzo-2008
Mensajes: 5
Antigüedad: 16 años, 1 mes
Puntos: 0
Ayuda JNI

Hola a todos, quiero hacer una dll para poder trabajar con un código que tengo en C desde Java. Esta es la primera vez que trabajo con JNI y debo de estar haciendo algo mal. He buscado información en diferentes foros y manuales pero no he encontrado la solución.

Me da el fallo: undefined reference to `help'.

Los comandos que utilizo para crear la dll son los siguientes:
Código HTML:
    > gcc -c miPrograma.c -o miPrograma.o -I"C:/Soft/Sun/SDK/jdk/include" -I"C:/Soft/Sun/SDK/jdk/include/win32"

    > gcc -lm -Wall -D_JNI_IMPLEMENTATION_ -Wl,--kill-at -I"C:\Soft\Sun\SDK\jdk\include" -I"C:\Soft\Sun\SDK\jdk\include\win32" -L"C:\lib" -shared assrules.c -o assrules.dll
En este último comando me da el fallo siguiente:
Código HTML:
    C:\DOCUME~1\User\CONFIG~1\Temp/cceDovOl.o:miPrograma.c:(.text+0x13): undefined ref
erence to `help'
    collect2: ld returned 1 exit status

El problema me pasa cuando intento llamar a la función help() que hay en un fichero .c que tengo.

Os indico el código que tengo y los comandos que uso para crear la dll:

Código Java:
Código:
class miPrograma
{
     private native void print();
     
     public static void main(String[] args)
     {
         new miPrograma().print();
     }
     static {
         System.loadLibrary("miPrograma");
     }
}
Código miPrograma.c:
Código:
#include <jni.h>
#include <stdio.h>
#include "miPrograma.h"
#include "miLibreria.h"

 
 JNIEXPORT void JNICALL 
 Java_miPrograma_print(JNIEnv *env, jobject obj)
 {
     printf("Hello World!\n");
     help();    /* Esta función está definida en el ficehro miLibreria.c */
     return;
 }

Código miLibreria.c:
Código:
#include <stdio.h>

static void help (void)
{
     printf("Helppp \n");
}

Código miLibreria.h:
Código:
extern void help (void);

Os agradeceria que me pudierais ayudar.
Leo
  #2 (permalink)  
Antiguo 03/02/2009, 01:49
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Ayuda JNI

Hola,

Cita:
Iniciado por agua_clara Ver Mensaje
Código miLibreria.c:
Código:
#include <stdio.h>

static void help (void)
{
     printf("Helppp \n");
}

Código miLibreria.h:
Código:
extern void help (void);
extern / static ?
Creo que la función 'help' existe únicamente dentro del programa (unidad de compilación) miLibreria.c.

Saludos,
  #3 (permalink)  
Antiguo 11/02/2009, 03:38
 
Fecha de Ingreso: marzo-2008
Mensajes: 5
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Ayuda JNI

Gracias por la respuesta. Tienes razón en lo que me dices. Lo he cambiado. Me seguía dando fallo, pero lo he solucionado. Es un fallo muy simple, a la hora de crear la dll me faltaba indicar el fichero objeto de la libreria.

Gracias por la ayuda!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:15.