Pergunta
Estou tentando compilar z / lib no z / OS USS (que é o direito de um mainframe). ive gmake tem eo compilador c89 (que im assumindo é C89 compatível com as normas) e USS é suposto ser compatível com POSIX.
Mas zlib parece ser tropeçar em
struct internal_state FAR *state; /* not visible by applications */
com o seguinte erro (s)
c89 -O3 -DUSE_MMAP -D_XOPEN_SOURCE_EXTENDED=1 -D_POSIX_SOURCE -c -o example.o example.c
ERROR CCN3277 ./zlib.h:92 Syntax error: possible missing ';' or ','?
ERROR CCN3007 ./zlib.h:92 "struct internal_state" is undefined.
ERROR CCN3166 ./zlib.h:103 Definition of function FAR requires parentheses.
ERROR CCN3276 ./zlib.h:103 Syntax error: possible missing '{'?
ERROR CCN3273 ./zlib.h:124 Missing type in declaration of gz_header.
ERROR CCN3166 ./zlib.h:126 Definition of function gz_header requires parentheses.
ERROR CCN3276 ./zlib.h:126 Syntax error: possible missing '{'?
WARNING CCN3137 ./zlib.h:1346 Declaration must declare at least one declarator, tag, or the members of an enumeration.
ERROR CCN3275 ./zlib.h:1350 Unexpected text z encountered.
ERROR CCN3282 ./zlib.h:1350 The type of the parameters must be specified in a prototype.
ERROR CCN3275 ./example.c:95 Unexpected text file encountered.
ERROR CCN3045 ./example.c:95 Undeclared identifier gzFile.
ERROR CCN3046 ./example.c:96 Syntax error.
ERROR CCN3045 ./example.c:98 Undeclared identifier file.
ERROR CCN3019 ./example.c:523 Expecting an array or a pointer to object type.
ERROR CCN3280 ./example.c:527 Function argument assignment between types "const char*" and "int" is not allowed.
CCN0793(I) Compilation failed for file ./example.c. Object file not created.
FSUM3065 The COMPILE step ended with return code 12.
FSUM3017 Could not compile example.c. Correct the errors and try again.
gmake: *** [example.o] Error 3
quando eu progressivamente tirar o FAR * (eu acho que é um ponteiro longe, mas im realmente não é certo) os erros ir embora. Mas como esta é uma biblioteca, eu não tenho certeza que outros artefatos vão ser produzido por querer retirar esta.
Alguém tem alguma idéia?
quaisquer cabeças de mainframe antigos lá fora?
Solução
verifica-se que há uma versão anterior do zlib que compila no USS, versão 1.1.4 ou perto disso. Seu nível de uma volta, mas eu presumo que isso funciona porque é antes da implementação do ponteiro FAR na última código. Então atm eu acho que ive tenho que trabalhar.
Obrigado por toda sua ajuda.
Saudações
Mark.
Outras dicas
FAR não é uma palavra-chave C89, é um Microsoft / Intelism e é provavelmente #defined em algum lugar. Se não, você precisa defini-lo como nada:
#define FAR
No entanto, isso provavelmente só irá corrigir um dos muitos problemas. Eu diria que a biblioteca usa alguma forma de compilação condicional às coisas do punho como ponteiros FAR -. Você precisa ler os docs para descobrir qual configuração é mais suitabkle para sua plataforma
Eu usaria xlc vez de c89 desde xlc é seu compilador padrão do sistema, mas você ainda provavelmente vai ter problemas. Eu assinar a lista de e-mail MVS-OE, as pessoas nele são bastante úteis. O link para informações sobre a lista parece ser para baixo agora, então envie um email para LISTSERV@VM.MARIST.EDU com a mensagem: INFO MVS-OE
FWIW, a IBM fornece uma versão pré-construídos de zlib que inclui suporte para o hardware de compressão (os chamados zEDC) disponíveis em mainframes recente-safra. Consulte zlib para zEnterprise Data Compression