Программа A на Коболе вызывает программу B через точку входа в B и падает

Программа COBOL B имеет 3 точки входа. Раздел Linkage содержит 1 общую область, а затем 3 области (назовите их link-sect-a, link-sect-b и link-sect-c). Программа A на Коболе вызывает программу B, используя запись 3. В z/OS это совершенно правильно (и нормально) писать

CALL PROGB-ENTRY3 using common area, link-sect-c

Похоже, проблема с GnuCobol заключается в том, что после компиляции обоих в программе B после точки входа 3 выполняется что-то простое:

DISPLAY 'First 50 bytes in link-sect-c 'link-sect-c(1:50)

вызывает сбой при ссылке на link-sect-c

Если вместо этого я изменю вызов в программе A (а также запись 3 в программе B, чтобы включить все 4 аргумента) на

CALL PROGB-ENTRY3 using common area, link-sect-a, link-sect-b, link-sect-c

(хотя мне не нужны ни link-sect-a, ни link-sect-b) код работает

Я могу включить 2 примера программ, если это необходимо, так как они действительно довольно тривиальны.


person Michael Simpson    schedule 02.07.2019    source источник
comment
Полные программы не нужны, но операторы ENTRY нужны. Полезной будет также полная команда компиляции (cobc ...) и номер используемой вами версии GnuCOBOL.   -  person Simon Sobisch    schedule 03.07.2019


Ответы (1)


Я добавил параметр -fsticky-linkage в компиляцию программы B, и это решило проблему. (Это было легко подтвердить. Удалите опцию и скомпилируйте снова; проблема возникла снова)

person Michael Simpson    schedule 03.07.2019
comment
Я предлагаю теперь принять ваш собственный ответ :-) и да, -fsticky-linkage необходимо для включения этого поведения IBM (или ´-std=ibm[-strict]`, которые включают в себя множество параметров). Как правило, я не предлагаю использовать эти параметры диалекта для каждой программы, но вы можете сравнить ibm-strict.conf и default.conf, чтобы проверить, есть ли другие параметры, которые вы, возможно, захотите использовать). - person Simon Sobisch; 03.07.2019
comment
Извините, по вашей ссылке я должен увидеть какой-то текст Ответьте на свой вопрос или какой-то флажок где-то, но я его не вижу. Я попытался снова отредактировать свой ответ, чтобы увидеть, появился ли он там, но не настолько, насколько я мог видеть. - person Michael Simpson; 04.07.2019
comment
Да, вы должны увидеть флажок под своим ответом - через 48 часов, которые еще не закончились все же - person Simon Sobisch; 04.07.2019
comment
Ага, вы забыли упомянуть 48 часов в своем предыдущем добавлении ???? - person Michael Simpson; 05.07.2019
comment
Точно сказать не могу. Я редактирую ответ, который я добавил, и тогда я должен увидеть флажок («потому что я этого не сделал»). В то же время на него сейчас вроде бы ответили 3 июля 8.56???? - person Michael Simpson; 09.07.2019
comment
Нет, вы должны увидеть флажок прямо, как указано в ссылке выше (может быть, принудительно перезагрузить сайт с помощью [CTRL]+[F5]?) - person Simon Sobisch; 09.07.2019