Domanda

Sto cercando di inizializzare l'ambiente di metallo C con il seguente codice, ma ottenere i seguenti errori sulla linea memset. ERRORE CCN3275 IMIJWS0.METAL.SAMPLIB (MEM): 6 testo imprevisto ')' incontrato.  ERRORE CCN3045 IMIJWS0.METAL.SAMPLIB (MEM): 6 non dichiarato identificatore ___MEMSET.  ERRORE CCN3277 IMIJWS0.METAL.SAMPLIB (MEM): 6 Errore di sintassi: possibile manca ')' o ''?  CCN0793 (I) Compilazione riuscita per il file //'IMIJWS0.METAL.SAMPLIB(MEM)'. il file oggetto non creato. Qui di seguito è il mio codice


   #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;

È stato utile?

Soluzione

Il problema è stato con l'ordine di ricerca. Anche se ho fatto di ricerca (/ usr / metal / include) da con il mio JCL non ho procedo con un'opzione di nosearch, così string.h è stato sempre preso dalle librarys di sistema standard invece della versione inclusa con Metal C. ho incollato il mio optfile dataset passai al CPARM sotto per refference.

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

Altri suggerimenti

Quindi, non ho idea. Ma alcuni suggerimenti:

  1. Si potrebbe provare a copiare / incollare questo codice qui da questo esempio solo per assicurarsi che funziona 'come previsto'

  2. Forse provare definire alcune delle macro qui ? (Quando ho fatto la programmazione C su zOS, ho dovuto fare includere alcune macro strani al fine di ottenere cose al lavoro. Non ho una spiegazione tecnica ragionevole per questo.)

  3. Si potrebbe provare a cercare memset () utilizzando "= 3.14" (da ISPF.) Vedi se tutti gli altri moduli utilizzano tale funzione, e quindi controllare le intestazioni che includono (o macro che essi definiscono - sia in i file C oi file H) per farlo funzionare.

  4. Un altro pensiero:. Prima della memset (), prova a fare mettere un printf () in Se si ottiene un errore di sintassi sulla stessa linea (solo per printf, piuttosto che memset) allora si può vedere se il problema è prima linea 6 -. come una parentesi fuori luogo

  5. Infine, se non ricordo male, ho dovuto compilare i miei moduli individuali, e quindi collegare manualmente (a meno che non ho scritto un JCL per fare questo per me.) Così si potrebbe essere necessario collegare una volta a collegare con la vostra altri moduli, e quindi collegare di nuovo contro la libreria C. Non per essere pedanti, ma: sei abbastanza certo che si sta facendo tutto il collegamento passa

Mi rendo conto che è un sacco di cerchi per cercare di probabilmente avete già letto i manuali, ma forse c'è qualcosa di utile provare?

Inoltre, e probabilmente già sapete questo, ma questo sito (per la ricerca di codici di errore) è infinitamente utile. (Insieme con i link qui sopra per full-text-ricerca manuale)

Modifica: questa pagina parla anche di "funzioni built-in" - si potrebbe provare (come indicato in fondo alla pagina) "#undef memcpy" per usare la non-built-in versione

?

Ci puoi mostrare i tuoi argomenti compilatore? È necessario assicurarsi che non stai tirando nei file di intestazione C standard, in aggiunta a quelli in metallo C. Ecco un esempio:

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

Vi manca la parentesi di chiusura '}' per la funzione? Che ne dite di eventuali terminazioni di linea e virgola mancanti? Quando manca bretelle / punti e virgola il compilatore C z / OS getta un po 'strano / fuorvianti messaggi a volte. Io non ce l'ho da provare, ma sto assumendo metallo fa pure.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top