Pergunta

Eu estou tentando inicializar o ambiente de Metal C com o seguinte código, mas obter os seguintes erros na linha memset. ERRO CCN3275 IMIJWS0.METAL.SAMPLIB (MEM): 6 texto Unexpected ')' encontrado. ERRO CCN3045 IMIJWS0.METAL.SAMPLIB (MEM): 6 não declarado identificador ___MEMSET. ERRO CCN3277 IMIJWS0.METAL.SAMPLIB (MEM): 6 Erro de sintaxe: possível falta ')' ou ''? CCN0793 (I) Compilação falhou por //'IMIJWS0.METAL.SAMPLIB(MEM arquivo)'. arquivo objeto não foi criado. Abaixo está o meu 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;

Foi útil?

Solução

O problema foi com a ordem pesquisa. Embora eu fiz pesquisa (/ usr / metal / include) de com no meu JCL eu não prosseguir com uma opção nosearch, então string.h estava sendo recolhido das librarys sistema padrão em vez da versão incluídas com Metal C. Eu colei meu dataset optfile I passado para o CPARM abaixo para refference.

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

Outras dicas

Então, eu não tenho idéia. Mas algumas sugestões:

  1. Você pode tentar copiar / colar esse código aqui de neste exemplo apenas para ter certeza que funciona 'como esperado'

  2. Talvez tente definir alguns dos macros aqui ? (Quando eu fiz C programação no zOS, eu tinha que fazer incluir alguns macros estranhas, a fim de obter material para o trabalho. Eu não tenho nenhuma explicação técnica razoável para isso.)

  3. Você pode tentar pesquisar para memset () usando "= 3,14" (a partir do ISPF.) Veja se quaisquer outros módulos usar essa função, e depois verificar os cabeçalhos que incluem (ou macros que eles definem - seja em os arquivos C ou arquivos H) para torná-lo trabalho.

  4. Outro pensamento:. Perante o memset (), tente fazer colocar um printf () in Se você receber um erro de sintaxe na mesma linha (apenas para printf, ao invés de memset), então você pode ver se o problema é antes da linha 6 -. como um parêntese extraviado

  5. Finalmente, se bem me lembro, eu tive que compilar meus módulos individuais, e depois ligá-los manualmente (a menos que eu escrevi um JCL para fazer isso por mim.) Então você pode ter que ligação uma vez para ligação com o seu outros módulos, e depois ligar novamente com a biblioteca C. Não ser pedante, mas: você está bastante certo de que você está fazendo todos os links passes

Eu percebo que é um monte de aros para tentar e você provavelmente já leu os manuais, mas talvez haja algo útil tentar?

Além disso, e você provavelmente já sabe disso, mas este site (para procurar códigos de erro) é infinitamente útil. (Juntamente com os links acima para full-text-pesquisando o manual)

Edit: esta página também fala sobre "built-in funções?" - você poderia tentar (como indicado na parte inferior da página) "memcpy #undef" para usar a não-built-in versão

Você pode nos mostrar seus argumentos do compilador? Você precisa ter certeza de que você não está puxando nos arquivos de cabeçalho C padrão em adição aos metais C. Aqui está um exemplo:

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

Você está faltando a chave de fechamento '}' para a função? Como sobre qualquer falta terminadores de linha semi-cólon? Quando faltando suspensórios / ponto e vírgula do z / OS compilador C lança alguma estranha / enganosa mensagens às vezes. Eu não tenho que tentar para fora, mas eu estou supondo metal faz tão bem.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top