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

GnuCOBOL调用MySQL C API的mysql_init函数找不到问题求助

解决GnuCOBOL调用MySQL C API时mysql_init模块找不到的问题

问题分析

编译成功但运行时提示libcob: mysql1.cob:17: error: module 'mysql_init' not found,核心原因有两个:

  1. 运行时系统无法定位libmysql.dll动态库,导致GnuCOBOL加载不到目标函数
  2. COBOL与C的函数符号命名规则不匹配(Windows下C函数默认会添加下划线前缀,如_mysql_init,而COBOL直接调用mysql_init会找不到对应符号)

解决方案

1. 确保运行时能加载libmysql.dll

  • 方法一:将C:\Program Files\MySQL\MySQL Server 8.0\lib路径添加到系统PATH环境变量中,添加后重启命令行窗口再运行程序
  • 方法二:直接复制libmysql.dll文件到生成的mysql1.exe所在的目录下

2. 修正COBOL调用的符号名

修改CALL语句,通过ALIAS子句指定C函数的实际导出符号(Windows下通常带下划线前缀):

PROCEDURE DIVISION.
      * Step 1: Open the MySQL connection
           CALL "mysql_init" ALIAS "_mysql_init" USING DB-CONNECTION-HANDLE
           END-CALL
           IF DB-CONNECTION-HANDLE = 0
               DISPLAY "Failed to initialize MySQL connection."
               STOP RUN
           END-IF

如果不确定实际符号名,可以用dumpbin /exports "C:\Program Files\MySQL\MySQL Server 8.0\lib\libmysql.dll"命令查看mysql_init的导出名称,再替换到ALIAS中。

3. 编译时指定符号命名规则

在编译命令中添加-fimplicit-underscore选项,让GnuCOBOL自动为C函数调用添加下划线前缀,无需修改代码:

cobc -d -v -x -o mysql1 mysql1.cob -fimplicit-underscore -L"C:\Program Files\MySQL\MySQL Server 8.0\lib" -llibmysql

验证

按照上述任一方案修改后,重新编译并运行mysql1.exe,即可解决模块找不到的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 23:22:35