le 11-12-2009 04:31 AM
Bonjour,
Je viens de passer à la version 9.0.1 de CVI et j'essai de porter une appli qui a été développée sous la version 8.0 et qui fonctionne. Je l'ai également compilé avec CVI 8.5 et pas de pb.
Une erreur récurrente après la compilation avec la version 9.0.1 est la suivante:
" Inconsistent type declarations for external symbol "ERR_declare_error_table" in modules ..."
Cette fonction, je l'utilise dans plusieurs développements, et une chose de curieuse, c'est qu'à chaque fois l'erreur est sur cette fonction alors que, je me répette, les softs fonctionnent parfaitement.
J'ai essayé avec différentes options de compilation, en vain.
Prototypde de la fonction:
ERRC ERR_declare_error_table (ERR_TYPE *error_type, char name_of_module[ERR_MAX_NAMEMODULE_LEN], char file[ERR_MAX_FILENAME_LEN], UINT8 *ident);
Appel de la fonction:
ERR_declare_error_table (err_type, NAME_OF_MODULE, __FILE__, &err_ident);
D'avance, merci pour votre aide
le 11-12-2009 04:54 AM
(re)Bonjour
Il semblerait que cela vienne du fichier "windows.h".
Il faut que je l'inclus dans chaque fichier ".c" utilisant ma fonction.
Quelles pouraient être les modif dans "windows.h" qui entraine cette erreur (cf. ci-dessus)?
Merci
le 11-16-2009 07:30 AM
Bonjour,
Au niveau du build option, au niveau de C Language Option, pouvez-vous essayer de décocher l'option "Require function prototypes" et "Build with c99 extension".
Cordialement.
Nacer M. | Certified LabVIEW Architecte
le 11-17-2009 01:24 AM
Bonjour,
Cette manip je l'ai déjà faite, et le résultat de la compilation est toujours le même " Inconsistent type declarations for external symbol".
Cédric
le 11-17-2009 01:56 AM
Nacer M. | Certified LabVIEW Architecte
le 01-05-2010 08:33 AM
Bonjour à tous
J'utilise le meme code que Cedric (celui-ci nous ayant sous traité une affaire contenant un module ayant cette fameuse fonction)
Je me suis retrouvé un temps avec cette erreur de linkage.
Par contre j'ai réussi à compiler mon appli avec d'ancienne source. De retour sur les nouvelles source l'erreur de linkage apparait de nouveau.
J'ai donc ajouté "Windows.h" dans "error_montoring.c" --> j'ai toujours les erreurs de linkage.
Avec le suppression de l'entete Windows.h (#include) j'ai enfin résussi à compiler mon application : plus aucunes erreurs de linkage.
Par méfiance j'ai rebooter ma machine croyant à une configuration momentané de CVI mais non cela compile bien désormais
Il faudrait que je fasse l'essai sur un autre PC pour boir si cela vient bien de CVI !
Ah l'informatique ... 🙂
Pierrick MADIOT
NOTE : je n'ai jamais eu l'option " Build with C99 ..." mais par contre l'autre option "Requie function ..." l'ai
le 11-15-2010 04:12 PM
Bonsoir
Je suis reparti entre temps sur CVI 7.0 pour résoudre ce problème
Cependant j'ai besoin de miger sur CVI 9.1 (2009) et le problème se pose à nouveau avez vous pu analyser ces sources et déterminer une solution ?
PS : je peux vou transmettre les sources du programme
Cordialement
Pierrick MADIOT
le 11-16-2010 03:49 AM
Bonjour
En fait en réfléchissant un peu plus sur le sujet, j'ai trouvé l'erreur de linkage :
En fait le prototype de la fonction étant :
ERRC ERR_declare_error_table ( ERR_TYPE * error, char name_of_module[ERR_MAX_NAMEMODULE_LEN],
char file[ERR_MAX_FILENAME_LEN], UINT8 *ident)
L'erreur provient donc de ERR_TYPE d'après l'erreur de linkage :
typedef struct {
INT8 code; /* code de l'erreur */
char *text; /* NULL ou texte associé au code d'erreur */
} ERR_TYPE;
En fait INT8 était deja définit dans une librairie de mon programme "DEF.H" de cette façon : typedef char INT8;
Hors LabWindows privilégie la bibrairie BaseTsd.h (en fait le SDK) ou INT8 est définit de cette façon typedef signed char INT8;
En attendant de trouver mieux (une directive de compilation) j'ai modifié ma structure de cette façon :
typedef struct {
INT8 code; /* code de l'erreur */
char code; /* code de l'erreur */
char *text; /* NULL ou texte associé au code d'erreur */
} ERR_TYPE;
Et la miracle cela compile et link parfaitement ! J'ai ainsi économisé 300€
Par contre question il y a une directive de compilation SDK_CONFLICT_PRORITY qui permet de privilégier le SDK WINDOWS au SDK National Instruments : y a t-il une directive de compilation permettant de privilégié ma déclaration de type à celle du SDK (WINDOWS ou National Instruments) ?
Merci de votre réponse
Cordialement
Pierrick MADIOT