Bonjour à tous,
Je souhaite écrire une petite librairie JNI pour permettre à un programme java d'accéder directement au systray de KDE4. N'étant pas un grand développeur C++, j'essaye de procéder par étapes ; j'ai donc commencé par créer une librairie "Hello word" toute simple, sans KDE4, et la classe java qui va avec. Comme KDE4 utilise CMake, je m'y suis mis aussi. J'ai créé le fichier CMakeLists suivant :
après compilation, l'ensemble s'exécute correctement ; java trouve la librairie, la charge et l'appel à la fonction C se déroule nominalement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 project (JKDE4) cmake_minimum_required(VERSION 2.6) find_package(JNI REQUIRED) include_directories(${JNI_INCLUDE_DIRS}) add_library(JKDE4 SHARED kde4_KDE4Test.cpp)
Lorsque j'ai voulu ajouter du code KDE4 dans le C, patatras, java me sort un UnsatisfiedLink, car il ne trouve plus la fonction native dans la librairie qu'il charge (oui oui celle-ci est bien chargée). Pour essayer de trouver la raison du problème, j'ai repris mon hello world ci-dessus, et j'ai uniquement rajouté les en-têtes KDE4 dans le fichier CMakeLists.txt ; le code lui-même n'ayant pas changé, il ne fait pas appel à des fonction KDE4. On obtient le fichier suivant :
Quand je fait un 'nm -g' sur les fichiers créés, on ne trouve effectivement plus la fonction java correspondante dans les symboles exportés, c'est pour cela que java ne la trouve pas. Ma question est donc que faut-il rajouter, dans les sources C ou le fichier CMakeLists.txt pour exporter correctement la fonction dans la librairie ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 project (JKDE4) cmake_minimum_required(VERSION 2.6) find_package(JNI REQUIRED) find_package(KDE4) include(KDE4Defaults) include_directories(${JNI_INCLUDE_DIRS}) kde4_add_library(JKDE4 SHARED kde4_KDE4Test.cpp)
Partager