Extension en C pour les nuls

 

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]