函数 slqastrt、sqlacall、sqlastop 上的 Ubuntu DB2 gcc prep 错误

标签 ubuntu gcc binding linker db2

我现在正在尝试使用 gcc 制作一个简单的“创建表”C - 嵌入式 sql 应用程序。

我的 sqc 文件代码:

#include <stdio.h>
#include <string.h>
#include <sqlca.h>

/* CREATE A DATABASE TABLE FOR TESTING COBOL-C-DB2 */
/* SQL includes */
  EXEC SQL INCLUDE SQLCA;
  EXEC SQL BEGIN DECLARE SECTION;
  EXEC SQL END DECLARE SECTION;

int main()
{
 EXEC SQL CREATE TABLE SYT006_COUNTRY(
 KEYFIELD                INT NOT NULL,
 SL_ISO2                 CHAR(2) NOT NULL,
 BZ_COUNTRY              CHAR(30) NOT NULL,
 KZ_RISK                 CHAR(1) NOT NULL,
 PRIMARY KEY (KEYFIELD)
 );
return (0);
}

db2 prep 确实创建了一个 C 文件,将 gcc 中的路径设置为 DB2s 包含文件夹
例如,确实使 #include "sqladef.h"行起作用。

然而,在重写的 main 函数中,它调用了我在标题中找不到的三个函数:
#line 25 "create_table.sqc"
sqlastrt(sqla_program_id, &sqla_rtinfo, &sqlca);
#line 25 "create_table.sqc"
sqlacall((unsigned short)24,1,0,0,0L);
#line 25 "create_table.sqc"
sqlastop(0L);

并报错:
undefined reference to `sqlastrt'

在 gcc 行中写入 -Wl 以将某些内容链接到某些内容后,我现在收到一条错误消息:
 /usr/bin/ld: cannot find : No such file or directory
 collect2: error: ld returned 1 exit status

我的脚本
db2start
db2 connect to sample
db2 prep create_table.sqc bindfile
db2 bind create_table.bnd
gcc -Wl, -Wimplicit -fno-stack-protector -trigraphs create_table.c -o runner - 
I/home/nikica/sqllib/include
./runner

未创建“runner”可执行文件

最佳答案

这些函数是 Db2 库的一部分。 Db2 提供的头文件具有函数定义等。您必须使用这些。

您的示例问题:

  • 在您的 .sqc 源中省略正确的 Db2 头文件
  • 从链接器命令行中省略库路径和 Db2 库

  • 研究所有 IBM 示例已经在您的 Db2 安装中(例如:在目录 /home/db2inst1/sqllib/samples/c 中)。将此目录内容复制到您自己的主目录,并使用同一目录中的 IBM 构建脚本(bldappbldrtn 等)在本地数据库上构建和运行这些示例。这将是美好的时光。

    在您的情况下,当您从 C 中的嵌入式 SQL 构建应用程序时,您可以使用示例脚本 bldapp构建你的可执行文件,你应该在你的 .sqc 文件中包含额外的头文件(例如 sqlenv.hsqlutil.hdb2ApiDf.h 等)。 bldapp脚本显示了如何为链接器提供库路径以及如何包含所需的库,该库包含预处理器输出引用的函数。

    关于函数 slqastrt、sqlacall、sqlastop 上的 Ubuntu DB2 gcc prep 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60934845/

    相关文章:

    python - 在 python 中读取、写入、追加和删除文件

    c - __libc_start_main 和 _start 是什么?

    java - 从 PHP5 调用 Java 方法

    c - 为什么 gcc 添加 .comment 和 .note.gnu.property 部分?

    WPF 强制重新绑定(bind)

    silverlight - 绑定(bind)完成后如何引发事件?

    ubuntu - apt-get更新非交互式

    c++ - 为什么这个 C++ 程序可以在 MacOS 上编译,但不能在 Ubuntu 上编译?

    c++ - 代码::阻止调试器失败

    c++ - ArrayList C++问题