C/Visual C - Ayuda JNI

   
Vista:

Ayuda JNI

Publicado por Leo (2 intervenciones) el 02/02/2009 12:48:15
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. Me da el fallo: undefined reference to `help'.

Los comandos que utilizo para crear la dll son los siguientes:
> 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:SoftSunSDKjdkinclude" -I"C:SoftSunSDKjdkincludewin32" -L"C:lib" -shared assrules.c -o assrules.dll

En este último comando me da el fallo siguiente:
C:DOCUME~1MRibCONFIG~1Temp/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:
class miPrograma
{
private native void print();

public static void main(String[] args)
{
new miPrograma().print();
}
static {
System.loadLibrary("miPrograma");
}
}

Código miPrograma.c:
#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! ");
help(); /* Esta función está definida en el ficehro miLibreria.c */
return;
}

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

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

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

Os agradeceria que me pudierais ayudar. He buscado información en diferentes foros y manuales pero no he encontrado la solución.

Leo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ayuda JNI

Publicado por fernando.gomez (1604 intervenciones) el 07/02/2009 00:05:03
¿por qué help() la declaras como estática? En C esto significa que dicha función no estará disponible fuera de la unidad de compilación en la que es declarada, es decir, fuera de miLibreria.c. No la declares como estática.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda JNI

Publicado por Leo (2 intervenciones) el 11/02/2009 10:37:38
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!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar