Question

Je suis en train d'initialiser l'environnement métal C avec le code suivant, mais je reçois les erreurs suivantes sur la ligne de memset. ERREUR CCN3275 IMIJWS0.METAL.SAMPLIB (MEM): 6 texte inattendu ')' a rencontré.  Erreur CCN3045 IMIJWS0.METAL.SAMPLIB (MEM): 6 identificateur non déclaré ___MEMSET.  ERREUR CCN3277 IMIJWS0.METAL.SAMPLIB (MEM): 6 Erreur de syntaxe: possible manquant ')' ou ''?  CCN0793 (I) Compilation a échoué pour le fichier //'IMIJWS0.METAL.SAMPLIB(MEM). fichier d'objet non créé. Ci-dessous mon code


   #include < string.h>
   #include < stdlib.h>
   #include < metal.h>
   void mymtlfcn(void)  {
   struct __csysenv_s mysysenv;
   memset ( &mysysenv, 0, sizeof ( mysysenv ) );
   mysysenv.__cseversion = __CSE_VERSION_1;
   mysysenv.__csesubpool = 129;
   mysysenv.__cseheap31initsize = 131072;
   mysysenv.__cseheap31incrsize = 8192;
   mysysenv.__cseheap64initsize = 20;
   mysysenv.__cseheap64incrsize = 1;

Était-ce utile?

La solution

La question était à l'ordre de recherche. Bien que je l'ai fait la recherche (/ usr / métal / include) à partir dans mon JCL Je ne sont pas passés avec une option nosearch, donc string.h devenais pris du système standard librarys au lieu de la version incluse avec métal C. J'ai collé mon jeu de données optfile je suis passé à l'CPARM ci-dessous pour refference.

//OPTIONS DD *
 SO
 LIST
 LONG
 NOXREF
 CSECT
 METAL
 LP64
 NOSEARCH
 search(/usr/include/metal/)

Autres conseils

Alors, je ne sais pas. Mais quelques suggestions:

  1. Vous pouvez essayer de copier / coller ce code ici cet exemple juste pour vous assurer qu'il fonctionne 'comme prévu'

  2. Peut-être essayer de définir quelques-unes des macros ici ? (Quand je l'ai fait la programmation C sur zOS, je devais faire inclure des macros étranges afin d'obtenir des choses à travailler. Je n'ai aucune explication technique raisonnable pour cela.)

  3. Vous pouvez essayer la recherche de memset () en utilisant « = 3.14 » (à partir ISPF.) Voir si d'autres modules utilisent cette fonction, puis vérifiez les en-têtes qu'ils comprennent (ou des macros qu'ils définissent - soit en les fichiers C ou fichiers H) pour le faire fonctionner.

  4. Une autre pensée. Avant la memset (), essayez de faire mettre un printf () dans Si vous obtenez une erreur de syntaxe sur la même ligne (uniquement pour printf, plutôt que memset), vous pouvez voir si le problème est, avant la ligne 6 -. comme une parenthèse déplacée

  5. Enfin, si je me souviens bien, je devais compiler mes modules individuels, puis les relier manuellement (à moins que je l'ai écrit un JCL à faire pour moi.) Vous pourriez avoir à relier une fois pour créer un lien avec votre d'autres modules, puis à nouveau un lien avec la bibliothèque C. Ne pas être pédant, mais: vous êtes assez certain que vous faites tout le lien passe

Je me rends compte que ya beaucoup de cerceaux pour essayer et que vous avez probablement déjà lu les manuels, mais peut-être il y a quelque chose d'utile d'essayer?

En outre, et vous le savez probablement déjà, mais ce site (pour rechercher des codes d'erreur) est infiniment utile. (Ainsi que les liens ci-dessus pour le manuel texte complet de recherche)

Edit: cette page parle aussi de « fonctions intégrées » - vous pouvez essayer (comme indiqué au bas de la page) « #undef memcpy » pour utiliser la version non intégré

?

Pouvez-vous nous montrer vos arguments de compilateur? Vous devez vous assurer que vous n'êtes pas tirer dans les fichiers standard d'en-tête C en plus de ceux en métal C. Voici un exemple:

xlc -c -Wc,metal,longname,nosearch,'list(./)'  -I. -I /usr/include/metal -I "//'SYS1.SIEAHDRV'" -S -qlanglvl=extended foo.c
as -mrent -mgoff -a=foo.list -o foo.o foo.s
ld -bac=1 -brent -S "//'SYS1.CSSLIB'" -o foo foo.o

Il vous manque l'accolade fermante « } » pour la fonction? Que diriez-vous des terminaisons de ligne point-virgule manquants? Quand accolades manquantes / points-virgules le compilateur z / OS C lance des messages étranges / parfois trompeur. Je ne l'ai pas essayer, mais je suppose métal fait aussi bien.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top