如何从命令行在 IBMi 中编译(和 link)COBOL 程序?

How to compile (and link) a COBOL program in an IBMi from the command line?

我有一个 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。 有什么想法吗?

所有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.