0

我在具有 DB2 连接性的 linux 机器上编译了 C++ 代码。二进制文件被编译,它在那个盒子上成功运行。但是,当我在不同的 linux 机器上部署相同的二进制文件时,该机器上出现 818 错误。

EmmMktStatus 是使用 libSTDbConnection.so 库连接到 DB2 并执行选择、删除更新等操作的二进制文件。

编译步骤:

1/ 数据库连接库编译:(libSTDbConnection.so)

连接到 DB2

-- db2 使用 ***** 连接到 ****** 用户 *****

创建 .i 文件(完成以在 sqC 代码中包含#define 变量)

db2 "prep STDbConnection.sqC PREPROCESSOR 'gcc -fPIC -I"/home0/db2inst1/sqllib/include" -I"/home0/db2inst1/DB2" -I/"/home0/u556899/Application/Source/Header" -I "/home0/u556899/Application/Source/Dal/Hdr" -I"/home0/u556899/log4cpp/include/log4cpp" -I"/home0/u556899/log4cpp/include" -O0 -g3 -Wall -c -fmessage -length=0 -E -o STDbConnection.i' COMPATIBILITY_MODE ORA LONGERROR NO bindfile"

从 .i 文件创建绑定文件

db2 绑定 STDbConnection.bnd

创建目标文件

gcc -fPIC -I"/home0/db2inst1/sqllib/include" -I"/home0/db2inst1/DB2" -I/"/home0/u556899/Application/Source/Header" -I"/home0/u556899/Application/源/Dal/Hdr"-I"/home0/u556899/log4cpp/include/log4cpp"-I"/home0/u556899/log4cpp/include"-O0 -g3 -Wall -c -fmessage-length=0 -o STDbConnection。 o STDbConnection.C

创建库 (.so) 文件

gcc -shared -L"/home0/db2inst1/sqllib/include" -L"/home0/db2inst1/DB2" -L/home0/u556899/Application/Lib -lLog4Cpp2 -L"/home0/db2inst1/sqllib/bin" - o libSTDbConnection.so STDbConnection.o STColumn.o STWhereStatement.o -L/home0/ibm/db2/V11.1/lib64 -ldb2 -L/home0/u556899/Application/Lib -lLog4Cpp2

2/ 使用 libSTDbConnection.so 库创建二进制文件 (EmmMktStatus)

创建目标文件

gcc -fPIC -c -g "-DOPENSSL_NO_KRB5" -I/home0/jdk1.7.0_67/include -I/home0/jdk1.7.0_67/include/linux -I/home0/u556899/Application/Source/Header -I/ home0/u556899/log4cpp/include/log4cpp -I/home0/u556899/log4cpp/include/ -I/home0/u556899/Application/Source/Dal/Hdr -I/opt/mqm/inc -I/usr/include -I /usr/include/libxml2 -I"/home0/db2inst1/sqllib/include" -I"/home0/db2inst1/DB2" -I"/home0/u556899/log4cpp/include" /home0/u556899/Application/Source/Its /EmmMktStatus.cpp

创建二进制 EmmMktStatus:

gcc -o EmmMktStatus -I/home0/u556899/Application/Source/Header /home0/u556899/Application/Objects/EmmMktStatus.o /home0/u556899/Application/Objects/STString.o /home0/u556899/Application/Objects/Log4CppMain2 .o -L。-L/usr/lib/gcc/x86_64-redhat-linux/4.1.1 -lstdc++ -L/usr/lib64 -lcrypto -L/home0/u556899/Application/Lib -lSTDbConnection -llog4cpp

使用上述编译步骤,我形成了 EmmMktStatus 可执行文件。它在编译它的同一个 linux 服务器上成功运行。但是,当我在不同的 linux 服务器上部署 EmmMktStatus 时,我在 db2 中收到 818 错误。

两个盒子都有相同的linux版本。两个盒子也有相同的 db2 版本 - v11.1.0.0 和 Fix pack "0"。

有人可以在上述编译步骤中提出任何问题。

注意:当我使用与 DB2 直接连接的 sqC 代码部署可执行文件时(不使用上述库 libSTDbConnection.so),它在两个盒子上都成功运行。我在编译库时似乎犯了一些错误。任何与 libSTDbConnection.so 库链接的可执行文件都会给我同样的错误(818)。

4

0 回答 0