> Tech > Compiler et lier la source

Compiler et lier la source

Tech - Par Renaud ROSSET - Publié le 24 juin 2010
email

Logiquement, après avoir codé le module de procédure, l'opération suivante consiste à  le compiler. Mais on ne peut pas compiler une procédure NoMain dans un objet programme avec l'option PDM 14. On utilisera plutôt une commande différente : CRTRPGMOD (Create RPG Module). Cette commande (exécutée par PDM option 15) compile

Compiler et lier la source

votre source, créant un
objet *MODULE.
Un module contient du code exécutable compilé. Mais
on ne peut pas appeler un module. Pour exécuter réellement
le code, il faut packager le module dans l’un des deux objets
suivants : (1) un programme appelable ou (2) un programme
de service.
Un programme appelable, désigné plus précisément
sous le nom de programme de point d’entrée unique, est
l’objet *PGM familier que vous avez l’habitude de voir sur
votre système. Un programme ILE est constitué d’un ou plusieurs
objets module qui ont été liés dans un programme par
l’exécution de la commande CRTPGM (Create Program) :CRTPGM PGM(program-name) +
MODULE(module-name)

Si le programme comporte plus d’un module, la commande
CRTPGM en donne la liste complète :

CRTPGM PGM(program-name) +
MODULE(module1 module2 ) +
ENTMOD(entry-module)

Le module d’entrée contient la première procédure
écrite par l’utilisateur (c’est-à -dire la procédure principale)
qui s’exécute quand le programme est appelé. C’est la procédure
pilote du programme, qui en vient à  contrôler le traitement
des procédures dans les autres modules. On ne peut
pas compiler le module d’entrée à  partir d’un membre
source qui spécifie NoMain ; toutefois, les membres source
pour tous les autres modules doivent spécifier NoMain.
Le modèle de lien est appelé bind by copy parce que
l’étape de liage copie en fait le code de l’objet *MODULE
dans l’objet *PGM . Tous les modules d’un programme ILE
ne sont pas forcément écrits dans le même langage : une partie
d’un programme peut très bien être écrite en RPG IV, une
deuxième partie en CL et une troisième en Cobol et/ou C.
Si un module est de grande taille et si les procédures qu’il
contient sont appelées à  être utilisées par plus d’un ou deux
programmes tournant simultanément, il vaut mieux recourir
à  une méthode qui utilise la mémoire plus efficacement –
bind by reference – pour packager le module dans un programme
de service. Un programme de service contient un
ou plusieurs modules, dont aucun n’est un module principal.
On peut comparer un programme de service au couteau de l’armée suisse. Il offre un ensemble
de « lames » de procédures que les
programmes peuvent utiliser. Un
programme peut appeler des procédures
dans un programme de service,
mais il n’existe qu’une copie
de l’exécutable dans le programme
de service.
service.
Un programme de service (objet
*SRVPGM) est un programme à 
points d’entrée multiples. Il est
constitué d’un ou plusieurs objets
modules qui ont été liés entre eux
par l’exécution de la commande :

CRTSRVPGM SRVPGM(srvpgm-name) +
MODULE(module1 module2 …)



Chaque procédure dans le programme
de service constitue un
point d’entrée individuel dans celui-
ci. Le programme de service luimême
n’est jamais appelé, seule la
procédure qu’il contient l’est. Les
modules présents dans le programme
de service doivent tous
être du type NoMain : ces modules
peuvent être écrits dans n’importe
quel langage ILE.
Pour qu’un programme puisse
utiliser les procédures qui se trouvent
dans un programme de service,
il faut faire référence au(x)
programme(s) de service quand on
lie le programme :

CRTPGM PGM(program-name) +
MODULE(module1 module2 ) +
ENTMOD(entry-module) +
BNDSRVPGM(srvpgm1 srvpgm2 …)

Le paramètre BNDSRVPGM
donne la liste des éventuels programmes
de service dont le programme
appelable aura besoin lors
de son chargement. L’étape de liage
stockera les informations indiquant
quelles procédures surviennent
dans quels programmes de service.
Ce modèle de liage est appelé bind
by reference parce que l’objet programme
ne contient pas réellement
le code, mais seulement une référence
au programme de service.
On peut utiliser l’une ou l’autre
des méthodes de liage, ou les deux,
pour le même programme. Les modules
recensés dans le paramètre
MODULE de la commande CRTP
GM sont liés par copie, tandis que
les programmes de service recensés
dans le paramètre BNDSRVPGM
sont liés par référence. Accessoirement,
la commande CRTSRVPGM
accepte aussi un paramètre BNDSRVPGM
pour le cas où d’autres
programmes de service devraient
être liés à  un programme de service
pour qu’il puisse accomplir son travail.

Téléchargez cette ressource

Les mégatendances cybersécurité et cyber protection 2024

Les mégatendances cybersécurité et cyber protection 2024

L'évolution du paysage des menaces et les conséquences sur votre infrastructure, vos outils de contrôles de sécurité IT existants. EPP, XDR, EDR, IA, découvrez la synthèse des conseils et recommandations à appliquer dans votre organisation.

Tech - Par Renaud ROSSET - Publié le 24 juin 2010