pb de compilation/macro

pb de compilation/macro - C - Programmation

Marsh Posté le 22-08-2005 à 15:30:55    

Bonjour,
 
j'ai récupéré un code en C que j'essaie de compiler pour en faire une biblio statique.
Dans ce code, il y a un fichier avec une pelle de #define et j'ai des pb de compilation a cause de ca (j'ai mis en commentaire une partie des define et ca va mieux, ca plante plus loin mais bon...toujours a cause des define d'ailleurs). L'erreur c'etait genre IMAGE_DTYPE non défini (alors que c'est défini dans les macros justement)
Comme ce n'est pas mon code, je ne sais pas si j'ai le droit de le publier ici, alors je voudrai juste savoir a quoi il faut faire particulierement attention quand on utilise des #define ?
Merci !

Reply

Marsh Posté le 22-08-2005 à 15:30:55   

Reply

Marsh Posté le 22-08-2005 à 15:44:26    

nifnef a écrit :

Dans ce code, il y a un fichier avec une pelle de #define et j'ai des pb de compilation a cause de ca (j'ai mis en commentaire une partie des define et ca va mieux, ca plante plus loin mais bon...toujours a cause des define d'ailleurs).  


 
:heink:  
 
A mon sens, tu n'as fait que reporter le problème. Tu devais avoir dans tes #define des références à des choses que le compilateur ne comprenait pas, genre un type non défini ou une fonction non déclarée.
Commenter les #define ne devrait que reporter l'erreur sur des emplois de #define qui pour le coup seront inconnus.
 

Citation :

L'erreur c'etait genre IMAGE_DTYPE non défini


 
Bingo.
Décommente tes #define, et regarde plutôt s'il ne te manque pas des fichiers.
 
 

Citation :

(alors que c'est défini dans les macros justement)


 
Manque forcément quelque chose.


Message édité par Elmoricq le 22-08-2005 à 15:45:54
Reply

Marsh Posté le 22-08-2005 à 16:41:27    

arf! effectivement, j'avais oublié de compiler avec une dépendance...  :pfff:  
Mais bon, ca ne fonctionne toujours pas! maintenant il me sort une erreur syntaxique!
 

Code :
  1. #ifdef SPM_DOUBLE
  2. #ifdef SPM_BYTESWAP
  3. #define GET(x) getdouble(x)
  4. #define RESAMPLE resample_double_s
  5. #define RESAMPLE_D resample_d_double_s
  6. #define SLICE slice_double_s
  7. #define RESAMPLE_0 resample_double_s_0
  8. #define RESAMPLE_1 resample_double_s_1
  9. #define RESAMPLE_D_1 resample_d_double_s_1
  10. #define RESAMPLE_POLY resample_double_s_poly
  11. #define RESAMPLE_D_POLY resample_d_double_s_poly
  12. #define SLICE_0 slice_double_s_0
  13. #define SLICE_1 slice_double_s_1
  14. #define SLICE_POLY slice_double_s_poly
  15. #define PLANE plane_double_s
  16. #else
  17. #define GET(x) (x)
  18. #define RESAMPLE resample_double
  19. #define RESAMPLE_D resample_d_double
  20. #define SLICE slice_double
  21. #define RESAMPLE_0 resample_double_0
  22. #define RESAMPLE_1 resample_double_1
  23. #define RESAMPLE_D_1 resample_d_double_1
  24. #define RESAMPLE_POLY resample_double_poly
  25. #define RESAMPLE_D_POLY resample_d_double_poly
  26. #define SLICE_0 slice_double_0
  27. #define SLICE_1 slice_double_1
  28. #define SLICE_POLY slice_double_poly
  29. #define PLANE plane_double
  30. #endif
  31. #define IMAGE_DTYPE double
  32. #endif
  33. #include <math.h>
  34. #include <stdlib.h>
  35. #include "spm_sys_deps.h"
  36. #include "spm_make_lookup.h"
  37. #include "spm_getdata.h"
  38. static void (*make_lookup)() = make_lookup_poly;
  39. static void (*make_lookup_grad)() = make_lookup_poly_grad;
  40. void RESAMPLE_0(int m, IMAGE_DTYPE* vol[], double out[], double x[], double y[], double z[],
  41.  int xdim, int ydim, int zdim, double background, double scale[], double offset[])
  42. {
  43. //corps de la fonction
  44. }


 
je ne vous ai mis qu'un extrait des macros ;)
donc mon erreur c'est :
[gcc]
spm_vol_utils.c:251: error: erreur de syntaxe before "IMAGE_DTYPE"
spm_vol_utils.c: Dans la fonction « RESAMPLE_0 »:
spm_vol_utils.c:255: error: `m' undeclared (first use in this function)
spm_vol_utils.c:255: error: (Each undeclared identifier is reported only once
spm_vol_utils.c:255: error: for each function it appears in.)
spm_vol_utils.c:258: error: `x' undeclared (first use in this function)
[/gcc]
pour nous c'est erreur ligne 45 (la premiere)
les SPM_MACHIN sont définis dans spm_getdata.h
aucune des variables n'est reconnue, et surtout pas IMAGE_DTYPE !
 
Si tu vois qq chose Elmoricq... j'y ai passé presque ma journée ca me met les nerfs en boule!


Message édité par nifnef le 22-08-2005 à 16:43:13
Reply

Marsh Posté le 22-08-2005 à 16:47:58    

et si tu compiles avec un -DSPM_DOUBLE ? [:petrus75]

Reply

Marsh Posté le 22-08-2005 à 16:58:41    

theshockwave a écrit :

et si tu compiles avec un -DSPM_DOUBLE ? [:petrus75]


 
Euh. S'il doit ajouter ce genre d'option pour que ça compile, à mon sens, y a un truc qui cloche.
Doit encore manquer des dépendances je pense, où se trouve le fameux SPM_DOUBLE défini.
 
Je peux me tromper.
 
Sinon au pire, il peut effectivement essayer cette option... Mais bon...  [:jagstang]


Message édité par Elmoricq le 22-08-2005 à 17:00:14
Reply

Marsh Posté le 22-08-2005 à 17:13:56    

yeah!Merci the shockwave! ca marche mieux (ca replante plus loin pour la meme erreur) par contre je n'ai pas compris ce que j'ai fait?! (ce que vous m'avez fait faire)
ca veut dire quoi -D ?
 
C'est défini dans datatypes.h

Code :
  1. #define SPM_UNSIGNED_CHAR     2
  2. #define SPM_SIGNED_SHORT      4
  3. #define SPM_SIGNED_INT        8
  4. #define SPM_FLOAT             16
  5. #define SPM_DOUBLE            64
  6. #define SPM_SIGNED_CHAR       (SPM_UNSIGNED_CHAR+128)
  7. #define SPM_UNSIGNED_SHORT    (SPM_SIGNED_SHORT+128)
  8. #define SPM_UNSIGNED_INT      (SPM_SIGNED_INT+128)
  9. /* byte swapped types */
  10. #define SPM_SIGNED_SHORT_S    (SPM_SIGNED_SHORT<<8)
  11. #define SPM_SIGNED_INT_S      (SPM_SIGNED_INT<<8)
  12. #define SPM_FLOAT_S           (SPM_FLOAT<<8)
  13. #define SPM_DOUBLE_S          (SPM_DOUBLE<<8)
  14. #define SPM_UNSIGNED_SHORT_S  (SPM_UNSIGNED_SHORT<<8)
  15. #define SPM_UNSIGNED_INT_S    (SPM_UNSIGNED_INT<<8)
  16. #define ISSWAPPED(A)  (A > 256)
  17. #define DESWAP(A)  (A >> 8)


 
 
 
là où ca plante maintenant:

Code :
  1. #define TINY 5e-2
  2. /* First order hold resampling - trilinear interpolation */
  3. int SLICE_1(double mat[16], double image[], int xdim1, int ydim1, IMADE_DTYPE* vol[], int xdim2, int ydim2, int zdim2, double background, double scale[], double offset[])


 
il faudrait que je mette -DSPM_DOUBLE/FLOAT/CHAR/UNSIGNED_CHAR, etc.. a la compilation?
En tout cas je pense (c'est obligé) que c'est un pb de compilation, puisqu'avant que je l'aie entre les mains ca fonctionnait  :D  
...(en même temps, vu la PCPoisse que j'ai.. :pfff:


Message édité par nifnef le 22-08-2005 à 17:16:21
Reply

Marsh Posté le 22-08-2005 à 17:32:10    

dans ce cas, ca veut dire que tu dois inclure datatypes.h avant d'inclure ton fichier qui contient tes macros ...

Reply

Marsh Posté le 22-08-2005 à 17:52:49    

nifnef a écrit :

ca veut dire quoi -D ?


C'est le début d'une commande ligne comprise par de nombreux compilateurs qui signifie 'Définir une macro de portée globale à l'unité de compilation'  
 
On peut faire

gcc ... -DMYMACRO ...


(définir)
 
ou même

gcc ... -DMYMACRO=123 ...


(définir et donner une valeur)
 
selon les besoins.


Message édité par Emmanuel Delahaye le 22-08-2005 à 17:53:27

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 22-08-2005 à 17:55:33    

Et les headers que tu utilises ont ete ecrit avec les pieds, parce qu'ils devraient inclure eux-meme tout ce dont ils ont besoins.
 
Sinon -DTOTO ca defini le symbole TOTO. C'est comme si tu ajoutais un "#define TOTO" au debut de chacun de tes fichiers.

Reply

Marsh Posté le 22-08-2005 à 18:25:25    

j'ai vraiment du mal avec l'anglais, parce qu'en lisant ca je comprenais pas grand chose : (man gcc)
 D   Dump all macro definitions, at the end of preprocessing, in addition to normal output.
 
Matafan, faut les excuser, c'est pas des informaticiens qui ont codé.. bon... faut que je vérifie mes dependances si je comprend bien!
j'y retourne!
 
Merci a tous

Reply

Marsh Posté le 22-08-2005 à 18:25:25   

Reply

Marsh Posté le 22-08-2005 à 18:32:08    

nifnef a écrit :

Matafan, faut les excuser, c'est pas des informaticiens qui ont codé..


 
Vu ton fichier datatypes et sa cohérence au niveau des définitions, on n'avait plus trop de doute [:dawa]

Reply

Marsh Posté le 22-08-2005 à 21:09:16    

nifnef a écrit :

j'ai vraiment du mal avec l'anglais, parce qu'en lisant ca je comprenais pas grand chose : (man gcc)
 D   Dump all macro definitions, at the end of preprocessing, in addition to normal output.


Non ca c'est -dD, pas -D.

Reply

Marsh Posté le 23-08-2005 à 08:23:15    

et moi qui doit tout relire et recoder, j'en bave à mort!!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed