2016-03-11 7 views
0

У меня Ubuntu 12.04.5, я установил платформу GnuCOBOL, и я запрограммировал GnuCOBOL на некоторое время без проблем.Программа GnuCOBOL не скомпилируется после тривиальных изменений в двух строках

теперь я делаю что-то очень простым: у меня есть программа MULT03.cob, что я компиляция и запуск, как показано ниже:

[email protected]:~/CobolProjects$ cobc -b MULT03.cob 
    [email protected]:~/CobolProjects$ cobcrun MULT03 
    Which multiplication table (01-99)? 4 
    How many entries to the table (01-999)? 5 
    How many lines maximally in one round of output (0-99)? 2 
    The 04`s (possibly extended) table is: 
    04 * 001 = 0004 
    04 * 002 = 0008 
    Press Enter to continue... 
    04 * 003 = 0012 
    04 * 004 = 0016 
    Press Enter to continue... 
    04 * 005 = 0020 
    [email protected]:~/CobolProjects$ 

Тогда что я делаю то, что я представлю поистине микроскопические изменения в программе код (я уверен, что проблема находится на более высоком уровне, в увязке/переменные среды или другие, но я ничего не изменилось там) и получить

[email protected]:~/CobolProjects$ cobc -b MULT04.cob 
[email protected]:~/CobolProjects$ cobcrun MULT04 
libcob: ./MULT04.so: undefined symbol: MULT04 
[email protected]:~/CobolProjects$ 

MULT04.cob в основном MULT03.cob с двумя линиями изменились. И тут же в каталоге, исходный код, объектный код и все:

[email protected]:~/CobolProjects$ ls MU* 
MULT02.cob MULT03.cob MULT04.cob MULTAB.cob 
MULT02.so MULT03.so MULT04.so MULTAB.so 

Я хотел бы знать, что это такое, что делает систему во время выполнения найти один, а не другой. Я пробовал именовать MULT04 по-разному (не обязательно, но просто для того, чтобы исключить этот источник ошибок). Другие ранние программы компиляции и запуска без проблем:

[email protected]:~/CobolProjects$ cobc -b BOILERPLATE.cob 
[email protected]:~/CobolProjects$ cobcrun BOILERPLATE 
[email protected]:~/CobolProjects$ 

Это (слегка различающиеся) сегменты кода:

004100 CALCULATE-AND-DISPLAY. 
004200  ADD 1 TO THE-MULTIPLIER. 
004210  
004220  ADD 1 TO INTERIM-LINE-NUMBER. 
004230  IF INTERIM-LINE-NUMBER IS GREATER THAN THE-LIMIT-PER-ROUND 
004235  MOVE 1 TO INTERIM-LINE-NUMBER 
004240  DISPLAY "Press Enter to continue..." WITH NO ADVANCING 
004250  ACCEPT THE-DUMMY. 
004300  COMPUTE THE-PRODUCT = THE-NUMBER * THE-MULTIPLIER. 
004400  DISPLAY 
004500  THE-NUMBER " * " THE-MULTIPLIER " = " THE-PRODUCT. 

004100 CALCULATE-AND-DISPLAY. 
004200  ADD 1 TO THE-MULTIPLIER. 
004210  
004220  ADD 1 TO INTERIM-LINE-NUMBER. 
004230  IF INTERIM-LINE-NUMBER IS EQUAL TO THE-LIMIT-PER-ROUND 
004235  MOVE 1 TO INTERIM-LINE-NUMBER 
004245  DISPLAY "Press Enter to continue..." WITH NO ADVANCING 
004250  ACCEPT THE-DUMMY 
004251  ELSE COMPUTE THE-PRODUCT = THE-NUMBER * THE-MULTIPLIER 
004400  DISPLAY 
004500  THE-NUMBER " * " THE-MULTIPLIER " = " THE-PRODUCT. 

Последний сегмент является MULT04.cob, бывший MULT03.cob.

[email protected]:~/CobolProjects$ diff MULT03.cob MULT04.cob 
59c59 
< 004230  IF INTERIM-LINE-NUMBER IS GREATER THAN THE-LIMIT-PER-ROUND 
--- 
> 004230  IF INTERIM-LINE-NUMBER IS EQUAL TO THE-LIMIT-PER-ROUND 
61,63c61,63 
< 004240  DISPLAY "Press Enter to continue..." WITH NO ADVANCING 
< 004250  ACCEPT THE-DUMMY. 
< 004300  COMPUTE THE-PRODUCT = THE-NUMBER * THE-MULTIPLIER. 
--- 
> 004245  DISPLAY "Press Enter to continue..." WITH NO ADVANCING 
> 004250  ACCEPT THE-DUMMY 
> 004251  ELSE COMPUTE THE-PRODUCT = THE-NUMBER * THE-MULTIPLIER 

ответ

0

Проблема заключается в полной остановке на блоке IF. Старайтесь не использовать периоды полной остановки. Вместо этого используйте соответствующие терминаторы областей; в этом случае END-IF.

Это должно работать:

004100 CALCULATE-AND-DISPLAY. 
004200  ADD 1 TO THE-MULTIPLIER. 
004210  
004220  ADD 1 TO INTERIM-LINE-NUMBER. 
004230  IF INTERIM-LINE-NUMBER IS EQUAL TO THE-LIMIT-PER-ROUND 
004235  MOVE 1 TO INTERIM-LINE-NUMBER 
004245  DISPLAY "Press Enter to continue..." WITH NO ADVANCING 
004250  ACCEPT THE-DUMMY 
004251  ELSE COMPUTE THE-PRODUCT = THE-NUMBER * THE-MULTIPLIER 
      END-IF 
004400  DISPLAY 
004500  THE-NUMBER " * " THE-MULTIPLIER " = " THE-PRODUCT. 
+1

Нет. Проблема состоит в том, что программа-ID отличается от имени файла (перед первой Fulll-стоп/период в имени файла), и это версия 1.1 перейти GnuCOBOL где идентификация проблемы является более общим сообщением. Об этом ранее говорилось в обширных комментариях по этому вопросу, которые были полностью устранены. Идентификатор PROGRAM был все еще MULT03, когда он должен был быть изменен на MULT04. –

 Смежные вопросы

  • Нет связанных вопросов^_^