No announcement yet.

Compiling a CBLLE *PGM object with *MODULE that uses QSNDDTAQ in AS400 V7R2M0

  • Filter
  • Time
  • Show
Clear All
new posts

  • Compiling a CBLLE *PGM object with *MODULE that uses QSNDDTAQ in AS400 V7R2M0

    Hi, I need some help in compiling CBLLE *MODULE and *PGM objects.

    As mentioned in​ the title, the *MODULE object uses QSNDDTAQ.
    Thenw, I try to compile the *PGM object using CRTPGM, I will get the error "CPD5D02 - Definition not found for symbol '&5'."

    IBM has an article for this, but it doesn't show how to define the QSNDDTAQ within the source code.

    Also, this only happens when I compile using Target Release V7R2M0.

    If anyone has an idea on how to resolve this, please share your thoughts on this. Thanks a lot.

  • #2
    At least show us the code and data definitions you are using for the call. Without that we're just guessing - actually I can't even thnink of a good guess without something to base it on.

    The fact that CRTPGM is failing implies a missing service program or something but ... help us out here so we can help you.


    • #3
      Thanks for the response.
      I forgot to check if any service program is involved in the program that I'm working with.

      ​​​​​​For the source code, I cannot retrieve it for now since I don't have access to the AS400 server for now, but I'll try to provide them once I can access it.


      • #4
        By the way - it just occurred to me that QSNDDTAQ is a dynamic program call. So there is no binding required there - other than to COBOL's own routines and it is not likely that that is a problem.


        • #5
          What is the actual CPD5D02 message? What value is it replacing the &5 with?


          • #6
            Hi all, after spending hours in checking the source code of the *MODULE object a creation parameters (which I missed), I finally realised that the error is due to the CRTCBLMOD parameter LINKLIT.

            Currently, it is set to:

            So, every external program called by the *MODULE is going to be treated as a PROCEDURE.
            In this case, QSNDDTAQ is not a PROCEDURE, but a PROGRAM.

            The solution for this is just to explicitly specify:
            This will allow the compiler to recognise this as a PROGRAM.

            Case is now closed and thanks for all the help.