0

私はUbuntu 12.04.5を持っています.GnuCOBOLプラットフォームをインストールしました.GnuCOBOLをしばらく問題なくプログラムしました.

私は今、非常に些細なことをしています: 以下のようにコンパイルして実行したプログラム MULT03.cob があります:

    martin@martin-1001PX:~/CobolProjects$ cobc -b MULT03.cob
    martin@martin-1001PX:~/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
    martin@martin-1001PX:~/CobolProjects$

次に、プログラムコードに本当に微視的な変更を加えます(問題はリンク/環境変数などのより高いレベルにあると確信していますが、そこでは何も変更していません)。

martin@martin-1001PX:~/CobolProjects$ cobc -b MULT04.cob
martin@martin-1001PX:~/CobolProjects$ cobcrun MULT04
libcob: ./MULT04.so: undefined symbol: MULT04
martin@martin-1001PX:~/CobolProjects$ 

MULT04.cob は基本的に MULT03.cob を 2 行変更したものです。どちらも、カタログ、ソース コード、オブジェクト コード、およびすべての中にあります。

martin@martin-1001PX:~/CobolProjects$ ls MU*
MULT02.cob  MULT03.cob  MULT04.cob  MULTAB.cob
MULT02.so   MULT03.so   MULT04.so   MULTAB.so

ランタイムシステムが一方を見つけて他方を見つけられない理由を知りたいです。MULT04 に別の名前を付けてみました (必須ではありませんが、エラーの原因を除外するためだけです)。他の以前のプログラムは、問題なくコンパイルおよび実行されます。

martin@martin-1001PX:~/CobolProjects$ cobc -b BOILERPLATE.cob
martin@martin-1001PX:~/CobolProjects$ cobcrun  BOILERPLATE
martin@martin-1001PX:~/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.

後者のセグメントは、以前の MULT03.cob である MULT04.cob です。

martin@martin-1001PX:~/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
4

1 に答える 1

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.
于 2016-03-15T15:22:27.100 に答える