2
我想用JNI调用现有的COBOL应用程序。 COBOL应用程序结构如下。jni打开cobol dll调用
c-wrapper(main)-->COBOLProgram -> several dyn(.so) and static called modules
现有的COBOL应用程序涉及到几个静态调用子程序(COBOL)和许多动态(COBOL)的。
Jni调用应用程序是可以的,但它无法找到并调用COBOL动态子模块。
(对于JNI)修改后的应用结构如下:
java class --> libjni.so --> appl.so
我的呼叫之前验证COB_LIBRARY_PATH和LD_LIBRARY_PATH环境变量,这些似乎是细。
以下错误消息得到了case动态模块。
libcob: ....<module>.so: undefined symbol: cob_save_call_params
我在Linux上使用64位,1.1.0。 gcc用于使用cobc命令的c输出创建二进制文件
LD_LIBRARY_PATH只能指向libcob和它所需的so-files。 COB_LIBRARY_PATH应该包含所有COBOL模块。 它们是什么样的? 您确定您对java运行时和libcob以及应用程序文件都使用相同的体系结构(32/64位)吗?你得到了什么确切的错误?你使用什么版本的OpenCOBOL? –
使用错误消息和OC版本更新了问题。在调用之后我使用异常,所以错误没有显示。 – cobp
好的,因此问题不在被调用的模块中,而是在libcob本身的一个符号中。它是否有助于通过'export LD_PRELOAD =/path/to/libcob.so'强制模块加载(在启动Java之前必须完成**)? 顺便说一句:“linux”不是非常具体;-)侧面问题:[抱歉污染问题]这是否发生[GnuCOBOL 2.0开发快照](https://sourceforge.net/projects/open-cobol/ files/gnu-cobol/2.0/gnu-cobol-2.0_nightly_r624.tar.gz/download)呢? –