GNUCOBOL 嵌入 SQL 运行时错误:未找到模块“OCESQLConnect”

GNUCOBOL 嵌入 SQL 运行时错误:未找到模块“OCESQLConnect”

我目前正在尝试运行一个带有嵌入式 sql 的 cobol pgm,该 sql 调用 postgresql 中的数据库。我在 cygwin 上运行 (GnuCOBOL) 2.2.0。

我已经按照步骤https://github.com/opensourcecobol/Open-COBOL-ESQL。我设法执行了所有步骤。但是,当我运行 pgm 时,我得到 OCESQL Connect not found 信息,如下所示:$ ./INSERTTBL * 插入 TTBL 已开始 * libcob:未找到模块‘OCESQLConnect’

我怀疑是“make install”期间 libocesql.so 没有在 /usr/local/lib 中创建,但我不确定为什么没有创建。因此我无法添加到 env >> export COB_PRE_LOAD=/usr/local/lib/libocesql.so 中。对于 ld 库,我已在 export LD_LIBRARY_PATH=/usr/local/lib 下添加。

谢谢。

答案1

在Windows 10操作系统上:

  1. 从以下位置下载 esqlOC 组件http://www.kiska.net/opencobol/esql/

    使用选项:适用于 Windows x86-64 (AMD-64) 和 x86 (win32) 的 ESQL 预处理器和运行时二进制文件

    此链接下载文件 BINARIES.ZIP

  2. 将 BINARIES.ZIP 文件解压到 OpenCobolIDE4.7.6 文件夹中

    例如:C:\Program Files (x86)\OpenCobolIDE\GnuCOBOL

    包含 esqlOC 组件的二进制文件夹

图 #1 安装二进制文件

  1. 在 IDE 中“首选项”选项的 SQL COBOL 表中包含 esqlOC 文件夹中的新子文件夹二进制文件:此项包含是为了让预编译器能够处理扩展名为“.Sqb”(带有 SQL 语句的 Cobol)的程序

图 #2 esqlOC 文件夹

  1. 还要在 IDE 中的选项 COMPILER 表“Preferences”中包含二进制子文件夹的路径。还要在此表的 Associatedextensions 中包含扩展名“.SQB”。

图 #3 编译器首选项

  1. 生成一个扩展名为.sqb 的新程序 cobol (COBOL WITH EXEC SQL)

  2. 包括与数据库的连接。

    a. 包括以下工作领域:

        EXEC SQL BEGIN DECLARE SECTION END-EXEC.
    01  HOSTVARS.
        05 BUFFER     PIC  X(1024).
        05 hVarD      PIC S9(5)V99.
        05 hVarC      PIC  X(50).
        05 hVarN      PIC 9 (12).
    
        EXEC SQL END DECLARE SECTION END-EXEC.
    

    b. 在程序部分中包括以下句子:

*--------------------------------------------------------------------- *

  • 连接到数据库

  • 也可以使用 DSN:'youruser/yourpasswd@yourODBC_DSN'
    ----------------------------------------------------------------------

       STRING 'DRIVER = {MySQL ODBC 5.1 Driver};'
              'SERVER = localhost;'
              'PORT = 3306;'
              'DATABASE = database;'
              'USER = mysql user;'
              'PASSWORD = mysql password ;'
    

*---------------------------------------------------------------- ----------------*

  • DB 特定 ODBC 参数的示例:
  • 没有压缩的 MySQL 连接(无论如何都是默认的)
  • ------------------------------------------------- ---------------- *
  •           'COMRESSED_PROTO = 0;'
       INTO BUFFER.
    
       EXEC SQLCONNECT TO: BUFFER
       END-EXEC.
    
  1. 编译带有.SQB扩展名的程序。它会发出以下错误,但这是正常的:

    “C:\Program Files (x86)\OpenCobolIDE\GnuCOBOL\bin/ld.exe:找不到 -locsql.libcollect2.exe:错误:ld 返回 1 退出状态”

  2. 打开预编译器生成的.COB扩展名的cobol程序

  3. 仅编译.COB扩展名的程序,而不对其进行修改。

  4. 执行。

答案2

首先:您需要下载并安装Open-COBOL-ESQL-1.2:Open-COBOL-ESQL-1.2.tar.gz

$ export CPPFLAGS="-I/opt/pgsql/include"
$ export LDFLAGS="-L/opt/pgsql/lib"
$ ./configure
$ make
$ sudo make install

第二步:导出这些标志:

export COPY=/Users/francisco/Downloads/Open-COBOL-ESQL-1.2/copy
export SCR=/usr/local/share/gnucobol/copy
export OC_OBJ=/Users/francisco/Downloads/Open-COBOL-ESQL-1.2/dblib

第三:编译.cbl

ocesql random.cbl random.cob

第四:使可执行文件

cobc -x random.cob $OC_OBJ/ocdb.o $OC_OBJ/ocdblog.o $OC_OBJ/ocdbutil.o $OC_OBJ/ocesql.o $OC_OBJ/ocpgsql.o -I$COPY -I$SCR -locesql -lpq

最后(祝你好运):

./random

相关内容