IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Faire de MTR une bibliothèque réutilisable


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Par défaut [Résolu]Faire de MTR une bibliothèque réutilisable
    Bonjour,

    Vous savez tous que le programme MTR qui permet de tracer des routes ne fait que de l'affichage. Moi je suis intéressé par la possibilité de récupérer la route qu'elles calcule et de l'utiliser dans un autre programme écrit en Java à l'aide de JNI. J'ai déjà réussi à trouver l'endroit du code où se trouvait le résultat à afficher. J'ai modifié leur code en ajoutant tous les routeurs dans un tableau et j'arrive désormais à récupérer la liste des routeurs dans un tableau, MAIS ça ne marche que dans leur code.Je n'arrive pas à créer mon propre fichier c et à appeller la fonction que j'ai ajoutée à leur code pour rfécpérer mes données, des messages d'erreur du genre "no 8 bits error" sont afficchés.

    Une aide sur ce problème me fera le plus grand plaisir.

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par BekerBeker Voir le message
    Vous savez tous que le programme MTR qui permet de tracer des routes ne fait que de l'affichage.
    Non, je ne sais même pas ce qu'est MTR (chez moi, c'est Moniteur Temps Réel)...
    Moi je suis intéressé par la possibilité de récupérer la route qu'elles calcule et de l'utiliser dans un autre programme écrit en Java à l'aide de JNI. J'ai déjà réussi à trouver l'endroit du code où se trouvait le résultat à afficher. J'ai modifié leur code en ajoutant tous les routeurs dans un tableau et j'arrive désormais à récupérer la liste des routeurs dans un tableau, MAIS ça ne marche que dans leur code.Je n'arrive pas à créer mon propre fichier c et à appeller la fonction que j'ai ajoutée à leur code pour rfécpérer mes données, des messages d'erreur du genre "no 8 bits error" sont afficchés.

    Une aide sur ce problème me fera le plus grand plaisir.
    Rien compris. Quelle est la question sur le langage C ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Par défaut
    Je m'excuse pour la non clarté de mon message.

    MTR (My Trace Route) est une autre version plus optimale de la commande traceroute qui permet de trouver le chemin de routage vers une station donnée à partir de son adresse I.P et à partir de la station où la commande est lancée.

    C'est un programme écrit en C.

    Je programme une application Java dans laquelle j'ai besoin du service de MTR, i.e récupérer le chemin d'accès vers des stations. Il me suffit donc de faire une interface JNI qui ferait appel au code natif MTR. Mon problème c'est que je n'arrive pas appeler leur code MTR. J'ai pourtant testé plein d'options de compilations. Et autre précision je travaille sous Ubuntu avec le compilateur GNU GCC.

    Je donne pour ceux que ça intéresserait le site de MTR: http://www.bitwizard.nl/mtr/

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 480
    Par défaut
    Citation Envoyé par BekerBeker Voir le message
    Je programme une application Java dans laquelle j'ai besoin du service de MTR, i.e récupérer le chemin d'accès vers des stations. Il me suffit donc de faire une interface JNI qui ferait appel au code natif MTR. Mon problème c'est que je n'arrive pas appeler leur code MTR. J'ai pourtant testé plein d'options de compilations. Et autre précision je travaille sous Ubuntu avec le compilateur GNU GCC.
    Je viens de tester mtr que je ne connaissais pas (honte à moi). Le programme fait du rafraîchissement en temps réel de la console dans laquelle il donne ses informations, et fait des statistiques en continu avec des pings à répétition.

    Il faudrait que tu nous dise exactement ce que tu cherches à récupérer, et que tu nous montres comment tu appelles mtr depuis ton propre programme ...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 14
    Par défaut
    Déjà je travaille directement avec le code source, pas avec la version exécutable.
    Il m'a suffit de suivre les appels à partir de la fonction main() pour trouver l'endroit précis où l'affichage se faisait. je n'ai donc eu qu'à ajouter les informations que le programme affichait dans un tableau de chaînes de caractères que j'ai déclaré.

    C'est dans le fichier report.c et dans la fonction : void report_close(void)
    Voici mes ajouts:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        char router[81];
        snprintf(router, sizeof(router), "%s", strlongip(net_addr(at)) );
        strcpy(routersNames[++routersCpt].string,router);
    net_addr(at) est calculé par mtr et correspond au at eme routeur trouvé. routersNames est le tableau de chaines que j'ai déclaré pour récupérer les routeurs.

    J'ai ensuite ajouté dans le fichier mtr une fonction qui me retourne le tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    struct stringArray*  getRout(int argc, char **argv)
    Mais comme mtr n'était accessible que par la fonction main, j'ai déplacé le code de main() dans la fonction que j'ai introduite (ce qui explique d'ailleurs les paramètres de cette dernière).

    Voilà c'est tout. J'ai fait un test et ça marche bien, puisque c'est désormais ma fonction que j'appelle dans la fonction main().

    je souhaiterais tout simplement faire du mtr ainsi modifié une bibliothèque que je pourrais utiliser en appelant ma fonction struct stringArray* getRout(int argc, char **argv) à partir d'un autre fichier C. Si j'arrive à le faire je pourrais l'utiliser avec JNI sans problème.

    Voici les étapes que je suis pour faire un test:
    1- gcc -fPIC -c *.c
    2- gcc -shared -fPIC *.o -o libmtr.so
    3- gcc -o Test Test.c -lmtr
    Le contenu de Test.c est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <mtr.h>
    int main(int argc, char **argv)
    {
    	char* s1="./mtr";
    	char* s2="-n";
    	char* s3="-w";
    	char* s4="www.google.fr";
    	char* arg[4]={s1,s2,s3,s4};
    	getRout(4,arg);
     
    }
    Et voici les erreurs affichées:
    /usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib/libmtr.so: undefined reference to `sqrt'
    /usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib/libmtr.so: undefined reference to `__dn_expand'
    /usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib/libmtr.so: undefined reference to `__res_mkquery'
    /usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib/libmtr.so: undefined reference to `pow'
    collect2: ld a retourné 1 code d'état d'exécution

    Si je n'ai pas été assez claire n'hésitez pas à me demander des précisions.

  6. #6
    Membre émérite Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Par défaut
    Code BekerBeker : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    /usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib/libmtr.so: undefined reference to `sqrt'
    /usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib/libmtr.so: undefined reference to `__dn_expand'
    /usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib/libmtr.so: undefined reference to `__res_mkquery'
    /usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib/libmtr.so: undefined reference to `pow'
    collect2: ld a retourné 1 code d'état d'exécution

    Cela ressemble à des erreurs de link.
    Avec GCC tu pourrais ajouter l'option suivante ( pour lier la bibliothèque libm.a ) :

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Faire une Bibliothèque de Fonctions sous NETBEANS
    Par fcfranck dans le forum NetBeans
    Réponses: 0
    Dernier message: 08/04/2011, 12h34
  2. Faire une bibliothèque compatible JavaME et JavaSE
    Par Mathieu147 dans le forum Java ME
    Réponses: 3
    Dernier message: 04/03/2009, 12h26
  3. Installer une bibliothèque (comment faire)
    Par exhortae dans le forum C
    Réponses: 3
    Dernier message: 14/12/2007, 09h08
  4. Une bibliothèque pour faire autre chose que jouer avec ma carte graphique ?
    Par Neilos dans le forum Coprocesseurs et calcul hétérogène
    Réponses: 7
    Dernier message: 09/11/2006, 09h51
  5. Réponses: 3
    Dernier message: 08/11/2006, 13h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo