Compiler errors 编译失败,因为Gnucobol DB2程序缺少库

Compiler errors 编译失败,因为Gnucobol DB2程序缺少库,compiler-errors,db2,gnucobol,Compiler Errors,Db2,Gnucobol,Gnucobol-db2 program.sqb,预处理完成。编译program.cbl失败- 在容器中运行的DB2Express-C&VM中安装的GnuCobol DB2预处理成功 对容器内运行的DB2服务器进行预处理 $ db2 "prep SQLCOBPGM.sqb bindfile target ANSI_COBOL" $ ls db2inst1 isus log SQLCOBPGM.bnd `enter code here`SQLCOBPGM.cbl SQLCOBPGM.sq

Gnucobol-db2 program.sqb,预处理完成。编译program.cbl失败-

在容器中运行的DB2Express-C&VM中安装的GnuCobol

DB2预处理成功 对容器内运行的DB2服务器进行预处理

$ db2 "prep SQLCOBPGM.sqb bindfile target ANSI_COBOL"
$ ls
db2inst1  isus  log  SQLCOBPGM.bnd  `enter code here`SQLCOBPGM.cbl  SQLCOBPGM.sqb  sqllib
编译失败 对于compile.cbl和sql库,它们被复制到安装了GnuCobol的ubuntu虚拟机上

cobc-static SQLCOBPGM.cbl-L/db2home/db2inst1/sqllib/lib64-ldb2-x-O/usr/bin/ld:找不到-ldb2 collect2:错误:ld返回了1个退出状态

cobc编译器失败,因为/usr/bin/ld:找不到-ldb2
是否缺少某些库?

请确保为库指定的目录:

存在

由执行编译的用户可读

包含超过100个必需的库,包括libd2.so.1等

因此,DB2Express安装必须选择相关选项来添加用于开发的人工制品,包括库/共享对象等


在Linux上使用cobc为我工作。我还确保LD_LIBRARY_PATH包含该目录,以允许生成的编译程序运行。

您已经指定了链接db2的库和用于查找的库路径,这似乎很好。
99%的错误是,指定的路径不包含libdb2文件,我建议将ls/db2home/db2inst1/sqllib/lib64/libdb2*的输出添加到问题中,或者库与链接器的体系结构不匹配,cobc和ld是64位可执行文件,不是吗?,或者正在执行的用户没有对库的读取权限/对其路径的执行权限

为什么加载库路径对链接有任何影响?链接路径已使用-L指定,否则将使用库_路径指定,不是吗?库路径已更正;lbd2错误已解决。但是,找不到模块“sqlgstrt”时出现错误;所以添加了-ldb2api来解决这个问题,但不知何故,这个库再次显示为缺失。此处显示的路径>:/home/mmsuser/cobd2/db2inst1/sqllib/lib64 ls-l libdb2o.so->libdb2o.so.1 libdb2apie.so->libdb2apie.so.1 libdb2apie.so.12 cobc SQLCOBPGM.cbl-std=default-I/home/mmsuser/cobd2/db2inst1/sqllib/include/cobol\u mf-l/home/mmsuser/cobd2/db2inst1/sqllib64-ldb2-ldapi-x/usr/bin/ld:找不到-ldb2api我不知道在哪里可以找到它们,但是如果它在api中,那么您提供的ls输出的名称将是-db2apie,但是我怀疑您是否真的需要它。我想你已经看到了。。。您还可以使用nm some.so | grep T检查导出函数的详细信息,以查看是否定义了sqlgrst/在何处定义了sqlgrst。感谢Simon-ldb2apie帮助-已编译,绑定也已完成。但是alas在运行时遇到了这个编译时错误>/arun2 libcob:找不到模块'sqlgstrt'-是的,我看过blogspot的文章,并尝试过对DB2进行预编译/绑定&compile/run in Ubuntu VM;对丢失的内容感到困惑只是为了重新检查:db2api是否64位正确?cobc也是64位的吗?如果两者都是相同的体系结构:是否有一个名为sqlgsrt的入口点请参见上面所示的nm调用?也许它是图书馆的大写字母?西蒙,它终于起作用了;用于预处理cobc的esqlOC-static要编译,odbc.ini用DB2驱动程序和连接字符串更新,设置为Db,driver,uid/pwd-t-trick>esqlOC-static-o arun.cob db2cobpgm.sqb>cobc-x-static-locsql-L/usr/local/lib arun.cob用于预处理/compile>/sql Conn-string:-DBALIAS=SAMPLE;DRIVER=/opt/ibm/db2/V11.1/lib64/libdb2o.so;UID=db2inst1;PWD=**OCSQL:DB使用SQLDriverConnection连接>OCSQL:PREPARE I/O从DB2INST1.EMP中选择EMPNO,WORKDEPT,其中EMPNO=?>SQLCODE:-+000000000 SQLSTATE:-00000员工:-000010部门:-A00答案中是否缺少任何内容?如果是,请评论,如果一切正常,请接受/投票回答。