You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RHEL环境下COBOL DB2静态文件链接报错求助

编译适配DB2的COBOL代码时的链接错误解决方法

问题场景

在RHEL 8.6服务器上编译链接适配DB2的COBOL代码时触发链接错误,执行的编译命令如下:

cob2 -F/etc/cob2.cfg -v myfile.cbl -L/opt/IBM/db2/V11.5/lib32 -I/opt/IBM/db2/V11.5/include/cobol_a -ldb2 -q"size(16384k)" -L. linkfile.a -o myfile.exe

环境信息

  • DB2版本:Informational tokens为DB2 v11.5.0.0、s1906101300、DYN1906101300AMD64,Fix Pack为0,安装路径/opt/IBM/db2/V11.5
  • cob2版本:
cob2 -V Program cob2 Version 1.1.0 Built Mon Sep 27 10:39:30 2021
  • GCC版本:8.5.0 20210514 (Red Hat 8.5.0-10),支持multilib模式

错误信息

/usr/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib/Scrtl.0(.text+0x1c): unresolvable R_386_GOTOFF relocation against symbol '__libc_csu_fini'
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: error ld returned 1 exit status.

问题分析

从cob2传递给gcc的参数可以看出,编译时同时指定了-shared(生成共享库)和-pie(生成位置独立可执行文件)两个冲突选项,导致链接器无法处理32位目标文件的重定位逻辑。此外,用于共享库的-fPIC和用于可执行文件的-fPIE参数混用,进一步加剧了符号解析的矛盾。

解决步骤

  1. 移除冲突的编译选项
    通过环境变量或配置文件让cob2停止传递共享库相关选项:

    • 临时环境变量方式:
      export COB2FLAGS="-qnotshared"
      
      设置后重新执行编译命令即可。
    • 永久配置方式:修改/etc/cob2.cfg文件,添加或修改如下配置:
      NOTSHARED=YES
      
  2. 调整DB2库的链接顺序
    将-ldb2移到编译命令的末尾(目标文件和本地库之后),确保链接器按正确顺序解析符号:

    cob2 -F/etc/cob2.cfg -v myfile.cbl -L/opt/IBM/db2/V11.5/lib32 -I/opt/IBM/db2/V11.5/include/cobol_a -q"size(16384k)" -L. linkfile.a -o myfile.exe -ldb2
    
  3. 补全32位依赖包
    确保RHEL 8.6上安装了完整的32位系统库和开发包:

    sudo dnf install glibc.i686 glibc-devel.i686 libgcc.i686
    
  4. 修正环境变量路径
    清理LD_LIBRARY_PATH中的无效路径,确保仅包含必要的32位库路径:

    export LD_LIBRARY_PATH=/opt/ibm/cobol/rte/usr/lib/:/opt/IBM/db2/V11.5/lib32:/home/user1/sqllib/lib32:/home/user1/sqllib/lib32/gskit:$LD_LIBRARY_PATH
    

验证

编译成功后,可通过以下命令确认生成文件的类型:

file myfile.exe

正常输出应显示为32位可执行文件,示例:
ELF 32-bit LSB pie executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2

内容的提问来源于stack exchange,提问作者Ian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 05:24:20