【问题标题】:How to compile (and link) a COBOL program in an IBMi from the command line?如何从命令行在 IBMi 中编译(和链接)COBOL 程序?
【发布时间】:2021-08-07 05:59:18
【问题描述】:

我有一个 COBOL 程序:

 IDENTIFICATION DIVISION.        
 PROGRAM-ID. HELLO1.             
 AUTHOR. MYSELF.                 
 PROCEDURE DIVISION.             
*    SHOW BEGINS                 
     DISPLAY 'HELLO WORLD RUN'.
     STOP RUN.                   

如果我使用它运行的 STRPDM 的选项 14 编译它。 但是如果我从命令行尝试这个(F10):

CRTPGM PGM(HIGINIO1/HELLO2) MODULE(*PGM) ENTMOD(*FIRST) BNDSRVPGM(*NONE) BNDDIR(*NONE) ACTGRP(*ENTMOD) TGTRLS(*CURRENT)

失败:未创建程序 HELLO2。 有什么想法吗?

【问题讨论】:

    标签: ibm-midrange cobol


    【解决方案1】:

    所有 ILE 语言,您首先必须编译模块。然后从模块创建程序。

    使用CRTCBLMOD 命令创建模块:

    CRTCBLMOD MODULE(yourlib/TEST0007B) SRCFILE(QCBLLESRC)
              OPTION(*SOURCE) DBGVIEW(*SOURCE)
    

    运行CRTPGM命令从模块创建可执行程序:

    CRTPGM PGM(TEST0007B) MODULE(*PGM) 
    

    这是一个 cobol sql 示例(没有走得太远,因为我不完全了解如何在 cobol 中执行循环)。使用CRTSQLCBLI 命令创建模块。然后CRTPGM创建程序。

    CRTSQLCBLI OBJ(TEST0008B) SRCFILE(QCBLLESRC)
              SRCMBR(TEST0008B) OBJTYPE(*MODULE) REPLACE(*YES)            
    crtpgm  test0008b   
    
         IDENTIFICATION DIVISION.                                 
           PROGRAM-ID. TEST0008B.                                 
           ENVIRONMENT DIVISION.                                  
           CONFIGURATION SECTION.                                 
             SOURCE-COMPUTER. IBM-ISERIES.                        
             OBJECT-COMPUTER. IBM-ISERIES.                        
           DATA DIVISION.                                         
           WORKING-STORAGE SECTION.                               
           01  A     PIC X(80) VALUE " ".                         
           01  B     PIC S9(8) VALUE 10.                          
           01  C     PIC S9(8) VALUE 5.                           
             01  SR_FILLER.                                       
                 05  sr_srcdta               PIC x(100) VALUE " ".
               EXEC SQL                                           
                    INCLUDE SQLCA                                 
               END-EXEC.                                          
           PROCEDURE DIVISION.                                    
           MAINLINE.                                              
               MOVE B TO C.                                       
               exec sql                                           
                    declare c1 cursor for                         
                    select  a.srcdta                              
                    from    qrpglesrc a                           
               end-exec.                   
               exec sql                    
                    open    c1             
               end-exec.                   
                                           
               EXEC SQL                    
                    fetch  c1              
                    into   :sr_srcdta      
               END-EXEC.                   
                                           
               if      sqlcode not = 0     
               display 'end of input file' 
               else                        
               DISPLAY sr_srcdta           
               END-IF.                     
                                           
               EXEC SQL                    
                    close  c1              
               END-EXEC.                   
                                           
               EXEC SQL                    
                    SELECT a.srcdta        
                      INTO :sr_srcdta      
                      FROM qrpglesrc a                     
                      fetch first row only 
               END-EXEC.                   
               DISPLAY sr_srcdta.          
               STOP RUN.                   
    

    【讨论】:

    • 谢谢@RockBoro。有用!只有一件小事:srcfile 是成员与 SRCFILE(QCBLLELESRC) 相关的地方,因为在这种情况下是 Cobol 程序。然后运行:CALL yourlib/yourpgm
    • 我与我共事过的每一位程序员都存在分歧。我更喜欢将所有代码放在一个源文件中。与 SRCTYPE 无关。我对所有事情都使用 QRPGLESRC。
    • 您是否尝试过带有 IBM i 扩展代码的 VS CODE?我必须在设置中添加/修改 COBOL 中的编译/链接选项。
    • 应该指出,PDM 的选项 14 使用 CRTBNDCBL,它将自动执行这两个步骤。
    • 是的,根据@Charles 使用 CRTBNDCBL (yourlib/yourmember) SRCFILE(QCBLLESRC) OPTION(*SOURCE) DBGVIEW(*SOURCE) 它的作品“一体化”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    相关资源
    最近更新 更多