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