Ver la Versión Completa : [Compilador] Error COBOL for Linux
dariodr
28 de marzo de 2023, 07:42
Buenas, tengo este simple codigo
IDENTIFICATION DIVISION.
PROGRAM-ID. EJEMPLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 OPC PIC X.
PROCEDURE DIVISION.
PRINCIPAL.
PERFORM UNTIL OPC = 'S' or 's'
DISPLAY "[C]argar datos al archivo" LINE 01 COL 41
DISPLAY "[A]gregar datos al archivo"
DISPLAY "[V]er el archivo"
DISPLAY "[S]alir"
ACCEPT OPC
END-PERFORM.
STOP RUN.
Al querer ejecutarlo me aparecen estos errores:
IBM COBOL for Linux 1.1.0 compile started
End of compilation 1, program EJEMPLO, no statements flagged.
/usr/bin/ld: ejemplo.o: en la función `EJEMPLO':
/home/dariodr/COBOL/empleados/ejemplo.cbl:(.text+0xf1): referencia a `_Qln_extnd_reset' sin definir
/usr/bin/ld: /home/dariodr/COBOL/empleados/ejemplo.cbl:(.text+0xfb): referencia a `_Qln_extnd_line' sin definir
/usr/bin/ld: /home/dariodr/COBOL/empleados/ejemplo.cbl:(.text+0x108): referencia a `_Qln_extnd_col' sin definir
/usr/bin/ld: /home/dariodr/COBOL/empleados/ejemplo.cbl:(.text+0x152): referencia a `_Qln_extnd_dspdata' sin definir
/usr/bin/ld: /home/dariodr/COBOL/empleados/ejemplo.cbl:(.text+0x15a): referencia a `_Qln_extnd_put' sin definir
/usr/bin/ld: ejemplo.o:(.rodata+0x30): referencia a `_Qln_extnd_reset' sin definir
/usr/bin/ld: ejemplo.o:(.rodata+0x34): referencia a `_Qln_extnd_line' sin definir
/usr/bin/ld: ejemplo.o:(.rodata+0x38): referencia a `_Qln_extnd_col' sin definir
/usr/bin/ld: ejemplo.o:(.rodata+0x3c): referencia a `_Qln_extnd_dspdata' sin definir
/usr/bin/ld: ejemplo.o:(.rodata+0x40): referencia a `_Qln_extnd_put' sin definir
collect2: error: ld returned 1 exit status
Alguien sabe de que se trata.
PD: estoy usando el compilador COBOL para LINUX.
JCantero
28 de marzo de 2023, 08:48
@dariodr, prueba a quitar
DISPLAY "[C]argar datos al archivo" LINE 01 COL 41
y dejas solo
DISPLAY "[C]argar datos al archivo"
Kuk
28 de marzo de 2023, 09:21
El problema es que se hace LINK dinámico, es decir que las rutinas del Run-Time se carguen diatónicamente pero que no encuentras las funciones citadas. Habrá que revisar la variable de entorno $PATH:
Ejecuta eso con el mismo usuario y nos pegas el resultado aquí:
env | grep -i 'IBM'
dariodr
28 de marzo de 2023, 10:21
@JCantero, Hola, de la segunda forma (sin LINE ni COL) funciona perfectamente pero si quiero usar LINE y COL como seria.
- - - Updated - - -
@Kuk, Copio y pego:
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/sbin:/usr/sbin:/opt/ibm/cobol/1.1.0/bin:/opt/ibm/cobol/rte/bin:/opt/ibm/cobol/debug/usr/bin
Kuk
28 de marzo de 2023, 10:41
@dariodr, vale pues vemos cosas de IBM en la variable de entorno $PATH. Habría que buscar en la documentación del compilador, para estas funciones esperadas con prefijo _Qln_extnd_* tiene que haber una librería adicional a instalar.
JCantero
28 de marzo de 2023, 12:18
@dariodr, eso es porque el cobol que utilizas no tiene esa opción en el "display".
No he visto mucho pero parece que tendrás que utilizar "screen-section"
Revisa la documentacion : https://www.ibm.com/support/pages/cobol-linux-x86-documentation-library
Kuk
28 de marzo de 2023, 13:31
@JCantero, en este caso debería haber sido bloqueado a la hora de compilar. Sin embargo vemos que requiere funciones concretas que no encuentra en ejecución. Si la compilación ha ido bien, se genera el binario y explota en ejecución, esto quiere decir que sintáxicamente hablando no hay error.
Como explota pidiendo funciones que no encuentra, sabemos por seguro que hace LINK dinámico (carga de módilos necesarios "en vuelo", cuando se lance el programa a ejecutar), y lo que habrá que hacer es instalar la librería que contiene las funciones que requiere.
La otra opción es que el compiulador este lleno de BUGs, cosa que me extrañaría siendo el compilador de IBM.
JCantero
28 de marzo de 2023, 13:40
@Kuk, eso ya no lo se.
IBM es muy pijotero.
Lo que me ha parecido ver es que tiene un script que compila y ejecuta, aparentemente. Y el compilador ya esta dando problemas.
Lo mismo le falta alguna libreria como tu dices o un swich (o parametro) a la hora de compilar.
Habrá que darle una vuelta a la documentación para ver si es una cosa, la otra o ninguna.
:astro:
Lo que está claro es que sin LINE funciona.
Le dije que probara porque es lo que vi en el manual, que el DISPLAY no tiene LINE ni COL.
Kuk
28 de marzo de 2023, 19:45
@JCantero, efectivamente habrá que leerse bien la documentación, además es un compilador poco conocido por lo que veo, así que no queda otra que buscar las respuestas en la documentación.
dariodr
29 de marzo de 2023, 02:44
Les escribi a IBM y esto es lo que me respondieron:
Hi Dario,
Our IBM COBOL compilers do not support SCREEN sections. The format of the DISPLAY statement you're using on line 11 is the one used when you have screen sections. If you remove "Line 01 COL 41", the program will successfully compile.
Hope that helps.
Please let us know if you have any other questions.
Sarah McNamara
on behalf of COBOL Linux Trial
JCantero
29 de marzo de 2023, 08:35
@dariodr, exactamente eso dice el manual.
Supongo que el cobol de IBM sigue como hace años. Yo vi COBOL para CICS (o algo parecido) y llevaba una especie de plantillas definidas (o pantallas). Llamabas a esa plantilla y te aceptaba los datos ( era como una screen section ) con lo cual separan la capa de logica de negocio del programa con la capa de interface con el usuario.
Asi pueden poner el programa a funcionar en un servidor central con la logica de negocio y la capa de interface con el usuario en una pantalla o en un explorador web.
Como tienes contacto con soporte, pregunta como puedes "diseñar un formulario de petición de datos". Si eso es factible por ahi tendrias una salida para lo que estas haciendo.
Cuentanos luego que te responden.
:astro:
dariodr
31 de marzo de 2023, 03:12
@JCantero, Esto es lo ultimo que me respondio IBM:
Hi Dario,
unfortunately for COBOL Linux we don't have a solution for you for that, other than using DISPLAY statements and padding with spaces to get the formatting you need.
Sarah McNamara
on behalf of COBOL Linux Trial
Pues tendre que hacerlo a mano con espacios, que joda con IBM.
Kuk
31 de marzo de 2023, 10:35
Señores, IBM ya no es lo que era... La madurez de este producto deja mucho que desear. Han dejado que la sintáxis acepte algo que nos capaces de asegurar en ejecución. :mm:
@JCantero, el CICS es mucho más que gestor de pantallas, es un Servidor Transaccional, que entre otras cosas, gestion pantallas, efectivamente, mediante mapas BMS:
IBM CICS Transaction Server for z/OS - Overview | IBM (https://www.ibm.com/products/cics-transaction-server)
Using Basic Mapping Support (BMS) in CICS (https://www.ibm.com/docs/en/txseries/8.2?topic=services-using-basic-mapping-support-bms-in-cics)
Hace años trabajé con ello, ya no me acuerdo bien de las cosas pero vamos, CICS es un monstruo enorme que se encarega de muchas cosas.
JCantero
31 de marzo de 2023, 10:54
@Kuk, exacto.
Lo que queria decir es que el cobol en AS400 no permitia LINE en su dia. Habia que hacerlo con el diseñador de pantallas.
Kuk
31 de marzo de 2023, 12:51
@JCantero, ya pero deberían capar la sintáxis en plataformas donde no está soportado, se han vuelto muy bagos los de IBM. :D
vBulletin v3.8.7, Derechos ©2000-2026, Jelsoft Enterprises Ltd.