Systeme d'exploitation



Documents pareils
Cours Java Native Interface

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Programmation avancée et répartie en Java : interfaçage avec d autres langages

Installation et prise en main

Java Licence professionnelle CISII,

Dossier. Développer en Java sur téléphone mobile. Benjamin Damécourt UFR SITEC Master 2 EESC 11 janvier 2012

Derrière toi Une machine virtuelle!

Initiation à JAVA et à la programmation objet.

Java 7 Les fondamentaux du langage Java

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/ Vue générale 2 - Mon premier programme 3 - Types de Programme Java

TP1. Outils Java Eléments de correction

DA MOTA Anthony - Comparaison de technologies : PhoneGap VS Cordova

TD/TP 1 Introduction au SDK d Android

Eclipse atelier Java

Traitement de données

Installer et configurer Oracle Forms 11gR2 Windows 7 64 bits

TP1 : Initiation à Java et Eclipse

Microsoft OSQL OSQL ou l'outil de base pour gérer SQL Server

Projet de Veille Technologique

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Hadoop / Big Data. Benjamin Renaut <renaut.benjamin@tokidev.fr> MBDS

Utiliser Java sans BlueJ

La base de données XML exist. A. Belaïd

Chapitre I Notions de base et outils de travail

27/11/12 Nature. SDK Python et Java pour le développement de services ACCORD Module(s)

TP1 : Initiation à Java et Eclipse

Cours Langage C/C++ Programmation modulaire

ECLIPSE ET PDT (Php development tools)

TUTORIEL: INSTALLATION D'UN SERVEUR LOCAL SOUS WINDOWS 7 POUR APPINVENTOR version du 06/04/2013

Cours 1: Java et les objets

ACTIVITÉ DE PROGRAMMATION

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

AUVRAY Clément (168187) HOMBERGER Alexandre (186897) GLADE. Langages, outils et méthodes pour la programmation avancée Page 1 sur 12

Tp 1 correction. Structures de données (IF2)

Architecture de la plateforme SBC

Tekla Structures Guide d'installation. Version du produit 21.0 mars Tekla Corporation

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

Java Licence Professionnelle CISII,

JAVA 8. JAVA 8 - Les fondamentaux du langage. Les fondamentaux du langage Java. Avec exercices pratiques et corrigés JAVA 8 29,90.

Plan du cours. Historique du langage Nouveautés de Java 7

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

contact@nqicorp.com - Web :

Java au cœur de la base de données Oracle

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

Tutorial pour une application simple

GANTTPROJECT. Julien TENDERO

Windows Front-End Installation Guide HOPEX V1R1 FR

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Réf. : S2I-CIELL2-PI-1.0. Version : 1.0. Auteurs : S2I-TOULON

Titre: Version: Dernière modification: Auteur: Statut: Licence:

Guide de mise à jour de Suite SAP Business Intelligence Patch 10.x

INITIATION AU LANGAGE JAVA

Serveur d application WebDev

Généralités sur le Langage Java et éléments syntaxiques.

RMI le langage Java XII-1 JMF

Serveur d'archivage 2007 Installation et utilisation de la BD exist

3IS - Système d'exploitation linux - Programmation système

Informatique industrielle A Systèmes temps-réel J.F.Peyre. Partie I : Introduction

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Gestion d utilisateurs et stratégie systèmes.

Environnements de développement (intégrés)

Le Framework.Net. Introduction. Pourquoi.Net?

I. Introduction aux fonctions : les fonctions standards

as Architecture des Systèmes d Information

PROTECTION DE MACHINE VIRTUELLE VMWARE DELL POWERVAULT DL2000 OPTIMISÉ PAR SYMANTEC

RN2-Programmation Orientée Objet - JAVA CH 1 Introduction à la POO et Java

SYNC FRAMEWORK AVEC SQLITE POUR APPLICATIONS WINDOWS STORE (WINRT) ET WINDOWS PHONE 8

TrueCrypt : installation et paramétrage

Auto-évaluation Programmation en Java

Le langage C. Séance n 4

Installation du package esup-portail Version uportal-2.5.x-esup

G. Méthodes de déploiement alternatives

"! "#$ $ $ ""! %#& """! '& ( ")! )*+

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Les messages d erreur d'applidis Client

Oracle Database SQL Developer Guide D'Installation Release 4.0 E

FreeNAS Shere. Par THOREZ Nicolas

Ateliers Python+Qt : Premiers pas : S'installer pour PyQt... en quelques minutes sous Windows!

Télécom Nancy Année

DotNet. Plan. Les outils de développement

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

1 Repérer les paramètres d installation (.exe ou.msi).

et de suivi de la corpulence des enfants

DOCUMENTATION ADMINISTRATEUR

Prototypage électronique

Présentation. Au programme. Fonctionnement. A l issue de ce module vous devriez...

Virtual PC Virtual PC 2007 Page I

Programmer en JAVA. par Tama

SERVEUR DE MESSAGERIE

Introduction à Eclipse

Installation 1K-Serveur

Introduction à Windows Script Host DescoDev

Tutoriel Drupal version 7 :

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

AFTEC SIO 2. Christophe BOUTHIER Page 1

Remote Method Invocation (RMI)

Transcription:

Introduction au dévellopement de Methodes Natives Partie I : appelle de methodes C++ sous windows Auteur: Frank Sauvage. 1 \ introduction aux methodes natives : Les methodes natives sont des methodes devellopées dans un autre langage que Java, généralement C ou C++, mais que pour diverses raisons on souhaite tout de même utiliser dans un programme écrit en Java. Le kit de devellopement Java integre en standard une interface appelée JNI pour Java Native Interface. La documentation de cette Interface est disponible sur le site de java. Pour la version 1.5 du sdk l'addresse directe est :http://java.sun.com/j2se/1.5.0/docs/guide/jni/ le principal avantage des methodes native reside dans le fait qu'utiliser un langage de plus bas que Java permet d'eviter les contraintes qu'impose la machine virtuelle. Il devient alors possible d'ecrire des methodes beaucoup optimisées et rapides, ainsi que d'ecrire des methodes accédant directement aux fonctions du systeme d'exploitation. Cependant, le fait d'ecrire une partie d'un programme dans un langage compilé impose de fournir des bibliothéque pour chacun des systemes où l'on souhaitera voir fonctionner l'application. Notes : Dans ce document seul l'ecriture et l'utilisation de methodes en C++ sous windows sera abordé. L'ecriture de methodes natives sur un autre systeme tel que Linux reste compatible avec ce document tant que la partie C++ reste conforme à la norme ANSI, et que les bibliothéques utilisées existe sur la plateforme cible. La compilation de methodes sous Linux sera abordé dans une prochaine partie de ce document. Programme Java Machine Virtuelle Methodes Natives Systeme d'exploitation

2 \ prérequis : Dans ce document nous considerons que l'environnement de travail est le suivant : SDK java version 1.5 (aussi appelé jdk5.0) disponible à l'addresse : http://java.sun.com/j2se/1.5.0/download.jsp Visual C++ Toolkit 2003 http://msdn.microsoft.com/visualc/vctoolkit2003/ le Visual C++ Toolkit (VCT) est une version gratuite et ligne de commande du compilateur C++ de Windows. Par defaut l'installation propose l'accés en ligne de commande à un environnement en ligne de commande specifique au compilateur. Pour fixer les variables d'environnement, cet environnement utilise un fichier batch contenu à la base du repertoire d'installation nommé VCVARS32.BAT. Dans notre cas, nous avons besoin de rajouter au chemin des include l'accés vers les fichiers d'entetes de la JNI. Sous windows, ces fichiers sont contenus dans le repertoire INCLUDE du JDK. Le sous repertoire WIN32 du repertoire include doit lui aussi etre rajouté. La ligne suivante represente les ajouts neccessaires : Set INCLUDE = c:\program files\java\jdk1.5.0_02\include;c:\program files\java\jdk1.5.0_02\include\win32;c:\program Files\Microsoft Visual C++ Toolkit 2003\include;%INCLUDE% Note : le chemin ici rajouté est celui de notre machine de reference. Il peut etre different sur votre propre installation.

3 \ création de methodes natives: Afin d'utiliser du C++ dans un code java, il est neccessaire de créer des fonctions qui serviront de lien entre les deux langages. La declaration des fonctions natives est assez delicate en ce qui concerne la partie C++, nous utiliseront donc un utilitaire fourni dans le JDK : javah. Javah est un outil qui permet de generer les fichiers d'entetes C++ a partir d'un code compilé java contenant des methodes declarées en tant que natives. A partir du fichier java suivant : package testjni; public class FonctionSimple { // chargement de la librairie associée // cette partie sera vue en details plus loin static { System.loadLibrary("testJNI_FonctionVoid"); //declaration de la fonction native.qui ne rends pas de resultat. public static native void fonctionvoid(); public static void main(string args[]) { System.out.println("Appel de la fonction C++ : "); //appel de la fonction : FonctionSimple.fonctionVoid(); on utilise la commande javah pour generer le fichier FonctionSimple.h la commande javah s'utilise de la meme maniere que la commande javac du compilateur. javah classpath repertoiredev\ -d repertoiredev\ testjni.fonctionsimple ce qui nous permet d'obtenir le fichier d'entete suivant : /* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class testjni_fonctionsimple */ #ifndef _Included_testJNI_FonctionSimple #define _Included_testJNI_FonctionSimple #ifdef cplusplus extern "C" { #endif /* * Class: testjni_fonctionsimple * Method: fonctionvoid * Signature: ()V */ JNIEXPORT void JNICALL Java_testJNI_FonctionSimple_fonctionVoid (JNIEnv *, jclass); #ifdef cplusplus #endif #endif

Comme l'indique l'entete, il est deconseillé d'editer ce fichier mais Les devellopeurs C++ seront famillier avec la declaration conditionnelle pour le C++ qui nous interresse. les autres s'interesseront plus particulierement à la ligne suivante : JNIEXPORT void JNICALL Java_testJNI_FonctionSimple_fonctionVoid (JNIEnv *, jclass); si on la compare à la declaration java : public static native void fonctionvoid(); on peut s'appercevoir que pour une fonction void, la version C++ passe en parametre deux arguments supplementaires : JNIEnv et jclass. Ces deux parametres seront explicité plus loin, mais sachez qu'il s'agit de variables d'environnement passées dans chaque fonction native. L'implementation de la fonction en C++ devient maintenant possible en reprenant le prototype ainsi obtenu. Dans notre cas, on se contentera d'afficher un message sur la sortie standard pour verifier que l'appel a bien reussi. On peut donc ecrire le fichier testjni_fonctionsimple.cpp suivant : #include "testjni_fonctionsimple.h" #include <iostream> JNIEXPORT void JNICALL Java_testJNI_FonctionSimple_fonctionVoid (JNIEnv *, jclass) { // Un affichage sur la console en C++ printf("l'appel de la fonction a ete effectue avec succes\n"); printf("nous sommes ici en train d'executer du code C++\n");

4 \ Java et les Bibliothéques dynamiques lorsqu'un programme java utilise une classe où des methodes natives sont utilisées, la machine virtuelle doit charger une bibliothéque dynamique de fonctions. Ces bibliothéques sont des morceaux de programmes compilés qui peuvent etre chargés et dechargés à la demande par de larges programmes. l'avantage en programmation C++ d'utiliser ces bibliothéques reside dans la modularité acquise en terme d'espace memoire utilisé car ces portions de code peuvent alors etre utilisées par plusieurs programmes simultanément cette possibilité est assurée par le systeme d'exploitation qui à la charge de les placer en memoire et de les rendre accessibles à la demande. Dans le cas d'ecriture des methodes natives, il est neccessaire d'avoir une bibliothéque par classe, ce qui peut rapidement devenir difficillement gerable. Cest pourquoi il est preferable de regrouper au maximum les methodes natives dans des classes de liaisons plutot que de les declarer directement la où elles sont utilisées. Revenons donc au code java de notre exemple : static { System.loadLibrary("testJNI_FonctionVoid"); comme on peut le voir ici, on demande en fait au systeme de charger pour nous la librairie de notre classe. Le fichier doit etre accessible par le systeme, soit en etant dans le repertoire de lancement du programme soit dans le path systeme. Note : vous pouvez lister la liste des repertoires du path systeme grace à la méthode java: System.out.println(System.getProperty("java.library.path"));

5 \ création de la bibliothéque C++ dynamique pour generer la bibliothéque, il est neccessaire d'utiliser le compilateur C++. dans le VCT, le compilateur est utilisable grace à la commande cl. A partir du terminal ligne de commande du VCT, il faut alors se placer dans le repertoire contenant les sources C++ a compiler, c'est à dire dans notre exemple les fichiers : testjni_fonctionsimple.cpp testjni_fonctionsimple.h la commande : cl /LD testjni_fonctionsimple.cpp compilera alors en tant que librairie dynamique les methodes natives de la classe java. Les fichiers suivant doivent etres generés : testjni_fonctionsimple.exp testjni_fonctionsimple.obj testjni_fonctionsimple.lib testjni_fonctionsimple.dll les trois premiers sont des fichiers intermediaires utilisés par le compilateur. Le dernier est la DLL qu'il va falloir fournir avec les programmes utilisant les methodes natives. Note : Nous ne nous occuperons pas ici des problemes de link et autres qu'apporte le C++. nous considerons que toutes les methodes sont implementées dans un seul et unique fichier. Cela n'inclus pas les utilisation de bibliothéques tierces. 6 \ lancement du programme : comme nous l'avons vu plus haut, la librairire doit etre accessible dans le path systeme ou presente dans le repertoire de lancement de l'application. La commande suivante java -classpath repertoiredev\ testjni.fonctionsimple fait donc apparaître le resultat suivant de notre premier programme utilisant les methodes natives : Appel de la fonction C++ : l'appel de la fonction a ete effectue avec succes nous sommes ici en train d'executer du code C++ Notes pour eclipse, si l'on desire utiliser les methodes natives, il est neccessaire de les placer à la racine du de l'arborescence du projet et non dans le repertoire de la classe elle meme. 7 \ Conclusion ce document introduit au mechanisme de creation et d'utilisation des methodes natives. Il permet aussi d'apprehender les contraintes liées à leur utilisation et à leur création. Il est à present neccessaire d'etudier comment passer des données vers et depuis les methodes natives ainsi que comment invoquer une methode sur un objet java depuis le code C++.