Вопрос
Я пытаюсь скомпилировать z/lib на z/OS USS (это мэйнфрейм).У меня есть gmake и компилятор c89 (который, как я предполагаю, соответствует стандартам c89), а USS должен быть совместим с POSIX.
Но zlib, похоже, сбоит.
struct internal_state FAR *state; /* not visible by applications */
со следующей ошибкой(ами)
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
когда я постепенно удаляю FAR * (я думаю, что это дальний указатель, но я действительно не уверен), ошибки исчезают.Но поскольку это библиотека, я не уверен, какие еще артефакты будут созданы при ее удалении.
есть ли у кого-нибудь идеи?
есть ли здесь старые мэйнфреймы?
Решение
оказывается, что существует предыдущая версия zlib, которая компилируется на USS, версия 1.1.4 или близкая к ней.Это задний уровень, но я предполагаю, что это работает, потому что это происходит до реализации указателя FAR в последней версии кода.Так что я думаю, что у меня все получилось.
Спасибо за вашу помощь.
С уважением
Отметка.
Другие советы
FAR не является ключевым словом C89, это Microsoft/Intelism и, вероятно, где-то #определено.Если нет, вам нужно определить его как ничего:
#define FAR
Однако это, вероятно, решит только одну из многих проблем.Я предполагаю, что библиотека использует некоторую форму условной компиляции для обработки таких вещей, как указатели FAR - вам нужно прочитать документацию, чтобы определить, какая конфигурация наиболее подходит для вашей платформы.
Я бы использовал xlc вместо c89, поскольку xlc — это компилятор вашей системы по умолчанию, но у вас, вероятно, все равно возникнут проблемы.Я бы подписался на список рассылки MVS-OE, люди в нем очень полезны.Ссылка на информацию о списке, похоже, теперь опущена, поэтому отправьте электронное письмо по адресу listserv@vm.marist.edu с сообщением:ИНФОРМАЦИЯ МВС-ОЭ
Кстати, IBM предоставляет предварительно созданную версию zlib, которая включает поддержку аппаратного обеспечения сжатия (так называемого zEDC), доступного на мэйнфреймах последних версий.Видеть zlib для сжатия данных zEnterprise