J'ai une classe Java qui appelle une classe C++ via une classe JNI C++ pour accéder à la fonctionnalité de commande 'fichier' fournie par libmagic.so.Erreur Redhat AS 4 Seg appelant magic_buffer en utilisant Java 1.6
- La classe C++ compile et exécute bien en tant que C++ principal()
-Il fonctionne très bien sur RHEL 5 en cours d'exécution Java 1.5 et 1.6;
-il fonctionne très bien sur RHEL 4 course java 1,5
-it jette un défaut sur le seg 26234 RHEL 4 avec Java 1.6
Le défaut de seg:
se produit à la appelez char * retptr = magic_buffer (cookie, bigbuf, 1000); Aucune erreur lorsque char * retptr = "une chaîne de caractères sûre"; est substitué. C'est pourquoi je conclus que la faute seg se produit à cet appel. J'utilise un appel alternatif, char * retptr = magic_file (cookie, "/ usr/include/magic.h"); pour déboguer les problèmes de tampon, car cet appel renvoie le même message de type de fichier nécessitant uniquement le nom de chemin d'accès complet du fichier, plutôt qu'un tampon complet du contenu du fichier. Il lance également le défaut seg sur la VM de test RHEL4/java 1.6. Ainsi, je conclus que le problème ne semble pas être de mauvais pointeurs ou des tampons débordants dans mon code.
magic_buffer est un appel à libmagic.so. Dans le code précédemment, d'autres appels réussis à cette lib sont faits. Cet appel, cependant, implique la base de données lib magique/usr/share/file/magic.
Compiler le C++ en tant qu'exécutable et l'exécuter sur la machine à problème fonctionne très bien.
Voici quelques conclusions:
A. Il y a implication JNI, en raison de # 4
B. En raison de # 1/# 2, je ne crois pas que ce soit une mise en œuvre JNI problème.
C. En raison de # 1, # 2 et # 4, je ne crois pas que ce soit un problème d'implémentation C++.
Des suggestions ou des commentaires? (initialement exécuté sur VMWare, maintenant testé sans implication VM)
Est-ce que cela s'est produit après une mise à jour? Vous ne pouvez pas revenir à java 1.5 sur RHEL4? – stacker
Il pourrait être utile d'examiner votre code C++ pour les experts JNI. –
Aucune mise à jour n'était impliquée; ceci teste le nouveau développement. Nous avons un environnement mixte de RHEL4/5 et Java 1.5/1.6.Je voudrais identifier la cause du problème plutôt que de chercher une solution de contournement sans comprendre ce qui ne va pas. – cvsdave