JNI : problème de compilation
Tony
-
Tony -
Tony -
Bonjour à tous:
voila j'ai un problème de linkage quand je compile mon programme comme suit :
g++ -ID:\Java\jdk1.5.0_02\include\win32 -ID:\Java\jdk1.5.0_
02\include test.c
test.c: undefined reference to `_imp__JNI_GetDefaultJavaVMInitArgs@4'
test.c: undefined reference to `_imp__JNI_CreateJavaVM@12'
collect2: ld returned 1 exit status
et voici le programme en question :
#include <jni.h>
#include <stdio.h>
int main(){
printf("je rentre\n");
JavaVM *jvm;
JNIEnv *env;
char classpath[1024];
JavaVMInitArgs vm_args;
JavaVMOption options[1];
options[0].optionString = "-Djava.class.path=.";
vm_args.version = JNI_VERSION_1_2;
vm_args.options = options;
vm_args.nOptions = 1;
vm_args.ignoreUnrecognized = 1;
JNI_GetDefaultJavaVMInitArgs(&vm_args);
JNI_CreateJavaVM(&jvm,(void **) &env, &vm_args);
jclass cls = env->FindClass("MonteCarloBureau");
jmethodID mid = env->GetStaticMethodID(cls,"avancerBar","(I)V");
if (mid == 0) {
printf("pas bon\n");
// Ca a planté !!!
} else {
printf("bon\n");
// Tout va bien, l'appel peut aboutir.
jint val = 50;
env->CallStaticVoidMethod(cls,mid,val);
}
printf("je sors\n");
return 0;
}
Kelk1 aurait-il la solution ?
Merci d'avance
voila j'ai un problème de linkage quand je compile mon programme comme suit :
g++ -ID:\Java\jdk1.5.0_02\include\win32 -ID:\Java\jdk1.5.0_
02\include test.c
test.c: undefined reference to `_imp__JNI_GetDefaultJavaVMInitArgs@4'
test.c: undefined reference to `_imp__JNI_CreateJavaVM@12'
collect2: ld returned 1 exit status
et voici le programme en question :
#include <jni.h>
#include <stdio.h>
int main(){
printf("je rentre\n");
JavaVM *jvm;
JNIEnv *env;
char classpath[1024];
JavaVMInitArgs vm_args;
JavaVMOption options[1];
options[0].optionString = "-Djava.class.path=.";
vm_args.version = JNI_VERSION_1_2;
vm_args.options = options;
vm_args.nOptions = 1;
vm_args.ignoreUnrecognized = 1;
JNI_GetDefaultJavaVMInitArgs(&vm_args);
JNI_CreateJavaVM(&jvm,(void **) &env, &vm_args);
jclass cls = env->FindClass("MonteCarloBureau");
jmethodID mid = env->GetStaticMethodID(cls,"avancerBar","(I)V");
if (mid == 0) {
printf("pas bon\n");
// Ca a planté !!!
} else {
printf("bon\n");
// Tout va bien, l'appel peut aboutir.
jint val = 50;
env->CallStaticVoidMethod(cls,mid,val);
}
printf("je sors\n");
return 0;
}
Kelk1 aurait-il la solution ?
Merci d'avance
1 réponse
voici la solution :
g++ -ID:\Java\jdk1.5.0_02\include\win32 -ID:\Java\jdk1.5.0_
02\include test.c D:\Java\jdk1.5.0_02\lib\libjvm.a
il faut transformer la jvm.lib en jvm.a pour que ce soit comptatible avec g++ ou gcc!!!
Pour cela il faut utiliser l'utilitaire reimp.exe avec la commande suivante:
reimp.exe jvm.lib
-> ça ne créer la librairie libjvm.a
Et après ça plus de problème de linkage !!!!!!!!!!
Tony
g++ -ID:\Java\jdk1.5.0_02\include\win32 -ID:\Java\jdk1.5.0_
02\include test.c D:\Java\jdk1.5.0_02\lib\libjvm.a
il faut transformer la jvm.lib en jvm.a pour que ce soit comptatible avec g++ ou gcc!!!
Pour cela il faut utiliser l'utilitaire reimp.exe avec la commande suivante:
reimp.exe jvm.lib
-> ça ne créer la librairie libjvm.a
Et après ça plus de problème de linkage !!!!!!!!!!
Tony