2

我正在尝试使用 JNI 调用现有的 COBOL 应用程序。COBOL 应用结构如下。

c-wrapper(main)-->COBOLProgram -> several dyn(.so) and static  called modules

现有的 COBOL 应用程序涉及多个静态调用子程序 (COBOL) 和许多动态 (COBOL) 子程序。

应用程序的 Jni 调用正常,但无法定位和调用 COBOL 动态子模块。

修改后的Application结构(针对jni)如下:

java class --> libjni.so --> appl.so 

我在 CALL 之前验证了 COB_LIBRARY_PATH 和 LD_LIBRARY_PATH 环境变量,这些似乎没问题。

在案例动态模块中收到以下错误消息。

libcob:  ....<module>.so: undefined symbol: cob_save_call_params

我在 linux 上使用 64 位,1.1.0。gcc 用于使用 cobc 命令的 c 输出创建二进制文件

4

1 回答 1

1

通过正确指定 -lcob 链接选项(使用 gcc 时)可以解决此问题。用于创建二进制文件的 gcc 命令已经包含该选项,但它被错误地放置在目标文件和源文件之间,这没有生效。在没有 JNI 调用的情况下执行 dll,不知何故不需要 -lcob 选项,但从 JNI 调用需要 -lcob 链接选项。

于 2016-07-21T22:10:59.670 回答