Pregunta

Estoy tratando de inicializar el entorno de metal C con el siguiente código, pero obtener los siguientes errores en la línea memset. ERROR CCN3275 IMIJWS0.METAL.SAMPLIB (MEM): 6 texto inesperado ')' encontró.  ERROR CCN3045 IMIJWS0.METAL.SAMPLIB (MEM): 6 no declarado ___MEMSET identificador.  ERROR CCN3277 IMIJWS0.METAL.SAMPLIB (MEM): 6 Error de sintaxis: es posible que falta ')' o ''?  CCN0793 (I) Compilación falló para //'IMIJWS0.METAL.SAMPLIB(MEM archivo)'. No fichero objeto creado. A continuación se muestra el código


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

¿Fue útil?

Solución

El problema fue con el orden de búsqueda. A pesar de que hice de búsqueda (/ usr / metal / incluye) de la JCL en mi yo no procedo con una opción de nosearch, por lo string.h estaba recibiendo recogió en el librarys estándar del sistema en lugar de la versión incluida en metal C. me he pegado a mi conjunto de datos optfile pasé a la CPARM continuación para refference.

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

Otros consejos

Por lo tanto, no tengo ni idea. Sin embargo, algunas sugerencias:

  1. Usted puede tratar de copiar / pegar el código de aquí este ejemplo sólo para asegurarse de que funciona 'como se esperaba'

  2. Tal vez intente definir algunas de las macros aquí ? (Cuando lo hice de programación C en zOS, que tenía que hacer incluir algunas macros extraños con el fin de conseguir cosas para trabajar. No tengo ninguna explicación técnica razonable para hacerlo.)

  3. Se puede intentar la búsqueda de memset () usando "= 3,14" (de ISPF.) A ver si cualquier otro módulo utilizan esa función, y después comprobar los encabezados que incluyen (o macros que definen - ya sea en los archivos de C o archivos H) para hacer que funcione.

  4. Otro pensamiento:. Antes de la memset (), tratar de hacer poniendo un printf () en Si obtiene un error de sintaxis en la misma línea (sólo para printf, en lugar de memset) a continuación, puede ver si el problema es antes de la línea 6 -. como un paréntesis fuera de lugar

  5. Por último, si no recuerdo mal, tuve que recopilar mis módulos individuales, y luego vincularlos manualmente (a menos que escribí un JCL hacer esto por mí.) Así que puede que tenga que vincular una vez para enlazar con su otros módulos, y entonces enlace de nuevo en contra de la biblioteca C. No es por ser pedante, pero: ¿estás bastante seguro de que usted está haciendo todo el enlace pasa

Me doy cuenta de que es un montón de aros para tratar de usted probablemente ya leer los manuales, pero tal vez hay algo útil para probar?

Además, y es probable que ya lo sabe, pero este sitio (para buscar códigos de error) es infinitamente útil. (Junto con los enlaces de arriba para texto completo-Busque en el manual)

Editar: esta página también habla de "funciones incorporadas" - se puede tratar (como se indica en la parte inferior de la página) "memcpy #undef", para usar la no-versión integrada

?

Puedes mostrarnos sus argumentos del compilador? Es necesario asegurarse de que usted no está tirando en los archivos de cabecera de C estándar, además de los metales C. He aquí un ejemplo:

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

¿Echas de la llave de cierre '}' para la función? ¿Qué hay de las terminaciones de línea punto y coma que faltan? Cuando faltan apoyos / punto y coma el compilador de C z / OS lanza alguna extraña / mensajes engañosos a veces. No tengo que probar, pero estoy asumiendo metal también lo hace.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top