Je le code C suivant mis en œuvre en faisant référence à un fichier d'en-tête déjà généré avec JNI:Problèmes avec la compilation JNI
#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"
JNIEXPORT void JNICALL
Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
printf("Hello World!\n");
return;
}
Lorsque je tente de le compiler (pour générer la sorte de bibliothèque) en utilisant:
cc -g -I/usr/lib/jvm/java-7-openjdk/include
-I/usr/lib/jvm/java-7-openjdk/include/linux HelloWorld.c -o libHelloWorld.so
J'ai eu cette erreur:
/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../i386-linux-gnu/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld returned 1 exit status
Comment puis-je résoudre ce problème?
J'ai eu la même erreur que l'OP. Je parviens à exécuter la première commande correctement, cependant, après avoir exécuté la deuxième commande je reçois ceci:/usr/bin/ld: HelloWorld.o: la relocalisation R_X86_64_32 contre '.rodata 'ne peut pas être utilisée lors de la création d'un objet partagé; recompiler avec -fPIC HelloWorld.o: erreur lors de l'ajout de symboles: Bad value collect2: erreur: ld a renvoyé 1 statut de sortie Des idées? – hadis
@hadis vous avez probablement besoin de compiler avec -fPIC comme le suggère l'erreur – msam
Cela a fonctionné, merci. – hadis