Bonjour,
J'essaie de développer un driver FUSE. Comme le fournisseur de données est développé en Java, j'essaie de faire le lien entre Java et C via une technologie qui s'appelle JNI et qui est faite pour ça.
Afin d'éviter les problèmes, j'ai fais une première implémentation bidon du driver FUSE entièrement en C et cette implémentation arrive bien à invoquer des fonctions de la libfuse.
J'ai ensuite fais un appel JNI à un programme C (bidon aussi). Comme JNI invoque des méthodes présentes dans des libs, j'ai compilé le prgramme en question sous forme de lib dynamique (appellons là libmyfs.so) que j'ai chargé depuis le programme Java, et là encore, ça fonctionne.
Là où ça se gâte c'est quand j'essaye de faire fonctionner JNI et FUSE. Je modifie le source de libmyfs pour qu'elle appelle la libfuse. Ca compile sans problème mais à l'exécution j'ai l'erreur suivante:
Exception in thread "main" java.lang.UnsatisfiedLinkError: /usr/lib/i386-linux-gnu/libmyfs.so: /usr/lib/i386-linux-gnu/libmyfs.so: undefined symbol: fuse_main_real
Cette fonction fuse_main_real() est dans la libfuse (d'ailleurs j'avais la même erreur au moment de la compilation du programme exécutable lors de la première phase, mais c'était juste parceque pkg-config n'étais pas installé et donc `pkg-config fuse --cflags --libs` ne rajoutais pas la libfuse lors de la compile).
Je ne sais pas si le problème vient de JNI ou de la façon dont j'ai compilé ma lib libmyfs, donc je cherche des deux cotés pour le moment. Est-ce qu'il y à des options de compilation particulières lorsqu'on compile une lib qui a des dépendances vers une autre lib?
j'ai utilisé:
Merci d'avance pour votre aide éventuelle.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 gcc -c myfs.c -I/usr/lib/jvm/java-7-openjdk-i386/include/ `pkg-config fuse --cflags --libs` -D_FILE_OFFSET_BITS=64 -o myfs.o gcc -shared -fPIC myfs.o -o libmyfs.so
Partager