dc 07/12/06
Page qui me sert plus de bloc-notes (je suis nul en C) que pour vous apprendre quelque chose. Cela part d'une lecture du livre de B. Desgraupes [1]
Création d'une bibliothèque Tcl appelée test.so qui contient une unique fonction Tcl somme prenant un argument numérique entier et renvoyant la somme des nombres entiers jusqu'à celui-ci.
Aucun test sur l'argument passé n'est fait, aucune sortie d'erreur n'est prévue. Bref le plus simple possible !
test.c
#include <tcl.h> int Somme_Init (Tcl_Interp *interp); int sommeObjCmd (ClientData cd,Tcl_Interp *interp,int objc,Tcl_Obj *CONST objv[]); int Somme_Init (Tcl_Interp *interp) { Tcl_PkgProvide(interp,"somme","1.0"); Tcl_CreateObjCommand(interp,"somme",sommeObjCmd,NULL,NULL); return TCL_OK; } int sommeObjCmd (ClientData cd,Tcl_Interp *interp,int objc,Tcl_Obj *CONST objv[]) { Tcl_Obj *resultat; int somme,i; Tcl_GetIntFromObj(interp,objv[1],&somme); for (i=somme-1;i>=0;i--){ somme = somme + i; } resultat=Tcl_GetObjResult(interp); Tcl_SetIntObj(resultat,somme); return TCL_OK; }
Pour la compilation sous linux :
$ gcc -fpic -c test.c -I/usr/usr/local/ActiveTcl-8.4.12/include $ gcc -shared test.o -o test.so
Pour automatiser la compilation, on élabore un Makefile :
FILE=test TCL_PATH=/usr/usr/local/ActiveTcl-8.4.12/include all: ${FILE}.o ${FILE}.so %.o: %.c gcc -fpic -c $< -I${TCL_PATH} %.so: %.o gcc -shared $< -o $@ clean: rm -f *.o *.so
-fpic d'après la doc Generate position-independent code (PIC) suitable for use in a shared library,...
Pour compiler, je fais donc :
$ make all
et pour nettoyer :
$ make clean
Pour utiliser la bibliothèque :
% cd /mon/chemin/vers/mon/fichier/so % lappend auto_path . ....la liste des répertoires de auto_path apparaît.... % load test.so somme % somme 10 55
À noter que
% load test.so couldn't find procedure Test_Init
plante car test n'est pas le nom de notre bibliothèque.
Les liens utiles
Le livre de B. Desgraupes [2]
Une page identique pour les plus forts par Stéphane Padovani [3]
Tout intégrer au code Tcl : utiliser Critcl avec Xavier Garreau [4]
Comment faire un makefile ? [5]
Les commandes C de la bibliothèque Tcl [6]
La doc de gcc [7]