我extperimenting COBOL最后一次,我有麻烦与链接和外部调用与COBOL
首先,我有一个简单的测试库源代码:
// testlib.c
#include <stdio.h>
void CFUNC() {
printf("This is a C function.\n");
}
字符串
我用以下代码编译我的库:gcc -c -o testlib.o testlib.c
和ar rcs libout.a testlib.o
之后
我有一个cobol源文件:
IDENTIFICATION DIVISION.
PROGRAM-ID. CallCFunction.
PROCEDURE DIVISION.
EXTERNAL "CFUNC".
CALL "CFUNC"
STOP RUN.
型
我用cobc -x -free -o cobollink cobollink.cbl -L/path/to/lib -lout
编译这个
我遇到了这个错误:
cobollink.cbl:6: error: syntax error, unexpected EXTERNAL
型
“外部”不应该在这里。代码在没有EXTERNAL的情况下编译良好,但找不到CFUNC
如何调用我的C函数?
$cobc -V
cobc (GnuCOBOL) 4.0-early-dev.0
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Keisuke Nishida, Roger While, Ron Norman, Simon Sobisch, Edward Hart
Built Sep 14 2021 19:23:38
Packaged Jun 06 2020 20:56:36 UTC
C version "11.2.0"
型
(使用UBUNTU 22.04)
谢啦,谢啦
2条答案
按热度按时间mzaanser1#
我可以通过以下方式让它工作:
几处改动:
gcc -c CFUNC.c -o CFUNC.o
编译(不是静态库,如果你需要静态库,我可以研究一下,只是根据我快速研究的结果)EXTERNAL
关键字):字符串
cobc -x -free -o cobollink test.cbl CFUNC.o
编译(假设CFUNC.o和COBOL源代码在同一个文件夹中)输出量:
型
drnojrws2#
您可能有兴趣尝试gcobol,一个基于gcc的新COBOL编译器。已经开发了18个月了,而且还很强劲。
字符串
在gcobol中,CALL目标默认转换为小写,使其不区分大小写,与ISO标准一致。要使示例正常工作,C函数必须是小写的,或者使用CDF CALL-CONVENTION语句逐字调用目标。