Windows 和 Visual Studio 上的 OpenCobol 和 PostgreSQL
OpenCobol & PostgreSQL on Windows with Visual Studio
我目前正面临这个 4 人团队的问题。
使用我在 kiska 的网站上下载的二进制文件。我能够将 cobol 编译为 C 并使用 cobcrun
运行 或将其编译为可执行文件。但是我无法让 opencobol 找到 postgres 命令。
这是我的 cobol 脚本的 strat :
identification division.
program-id. pgcob.
data division.
working-storage section.
01 pgconn usage pointer.
01 pgres usage pointer.
01 resptr usage pointer.
01 resstr pic x(80) based.
01 result usage binary-long.
01 answer pic x(80).
procedure division.
display "Before connect:" pgconn end-display
call "PQconnectdb" using
by reference "dbname = postgres" & x"00"
by reference "host = 10.37.180.146" & "00"
returning pgconn
end-call
...
调用 PQconnectdb
失败 module ont found : PQconnectdb
我注意到如果我重命名 libpq.dll,错误消息会更改为 can't find entry point
。所以至少我确定它可以获取我的 dll。
深入研究libcob
库的调用方法的代码后。我发现可以使用环境变量 COB_PRE_LOAD 预加载一些 dll,但没有结果。
下面是编译 cobol 的脚本:
call "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\amd64\vcvarsamd64.bat"
set COB_CONFIG_DIR=C:\OpenCobol\config
set COB_COPY_DIR=C:\OpenCobol\Copy
set COB_LIBS=%COB_LIBS% c:\OpenCobol\libpq.lib
set COB_LIBRARY_PATH=C:\OpenCobol\bin
set COB_PRE_LOAD=C:\OpenCobol\libpq.dll
@echo on
cobc -info
cobc -free -o pgcob -L:"C:\OpenCobol" -llibpq.lib test_cobol\postgres.cob
call cobcrun pgcob
我没有看到任何遗漏,我使用的是来自 kiska 站点的 64 位二进制文件,并使用来自 Visual Studio 的 64 位 cl.exe,Postgres 也是 64 位版本(使用 dependencyChecker 检查)。
我什至尝试从 Visual Studio 编译生成的 C,结果相同,但我可能会遗漏一些东西,我在 C 中很烂,从来没有真正需要管理 DLL 或使用 Visual Studio .
我错过了什么?
COB_PRE_LOAD 不采用任何路径或扩展名,请参阅 short documentation for the available runtime configurations。我猜
set COB_LIBRARY_PATH=C:\OpenCobol\bin;C:\OpenCobol
set COB_PRE_LOAD=libpq
会起作用的。如果您没有在其中放置任何其他可执行文件,则可以省略 C:\OpenCobol\bin。
如果它不起作用(即使它起作用),我会尝试在编译时解析 C 函数。要么使用
CALL STATIC "PQconnectdb" using ...
或适当的 CALL-CONVENTION
或按原样保留程序并使用
cobc -free -o pgcob -L"C:\OpenCobol" -llibpq -K PQconnectdb test_cobol\postgres.cob
来自 cobc --help:
-K generate CALL to <entry> as static
总的来说:kiska.net 中的二进制文件已经过时了。我强烈建议从 official download site or ideally build them on your own from source, see the documentation for building GnuCOBOL with VisualStudio.
获取更新的
我目前正面临这个 4 人团队的问题。
使用我在 kiska 的网站上下载的二进制文件。我能够将 cobol 编译为 C 并使用 cobcrun
运行 或将其编译为可执行文件。但是我无法让 opencobol 找到 postgres 命令。
这是我的 cobol 脚本的 strat :
identification division.
program-id. pgcob.
data division.
working-storage section.
01 pgconn usage pointer.
01 pgres usage pointer.
01 resptr usage pointer.
01 resstr pic x(80) based.
01 result usage binary-long.
01 answer pic x(80).
procedure division.
display "Before connect:" pgconn end-display
call "PQconnectdb" using
by reference "dbname = postgres" & x"00"
by reference "host = 10.37.180.146" & "00"
returning pgconn
end-call
...
调用 PQconnectdb
失败 module ont found : PQconnectdb
我注意到如果我重命名 libpq.dll,错误消息会更改为 can't find entry point
。所以至少我确定它可以获取我的 dll。
深入研究libcob
库的调用方法的代码后。我发现可以使用环境变量 COB_PRE_LOAD 预加载一些 dll,但没有结果。
下面是编译 cobol 的脚本:
call "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\amd64\vcvarsamd64.bat"
set COB_CONFIG_DIR=C:\OpenCobol\config
set COB_COPY_DIR=C:\OpenCobol\Copy
set COB_LIBS=%COB_LIBS% c:\OpenCobol\libpq.lib
set COB_LIBRARY_PATH=C:\OpenCobol\bin
set COB_PRE_LOAD=C:\OpenCobol\libpq.dll
@echo on
cobc -info
cobc -free -o pgcob -L:"C:\OpenCobol" -llibpq.lib test_cobol\postgres.cob
call cobcrun pgcob
我没有看到任何遗漏,我使用的是来自 kiska 站点的 64 位二进制文件,并使用来自 Visual Studio 的 64 位 cl.exe,Postgres 也是 64 位版本(使用 dependencyChecker 检查)。
我什至尝试从 Visual Studio 编译生成的 C,结果相同,但我可能会遗漏一些东西,我在 C 中很烂,从来没有真正需要管理 DLL 或使用 Visual Studio .
我错过了什么?
COB_PRE_LOAD 不采用任何路径或扩展名,请参阅 short documentation for the available runtime configurations。我猜
set COB_LIBRARY_PATH=C:\OpenCobol\bin;C:\OpenCobol
set COB_PRE_LOAD=libpq
会起作用的。如果您没有在其中放置任何其他可执行文件,则可以省略 C:\OpenCobol\bin。
如果它不起作用(即使它起作用),我会尝试在编译时解析 C 函数。要么使用
CALL STATIC "PQconnectdb" using ...
或适当的 CALL-CONVENTION
或按原样保留程序并使用
cobc -free -o pgcob -L"C:\OpenCobol" -llibpq -K PQconnectdb test_cobol\postgres.cob
来自 cobc --help:
-K generate CALL to <entry> as static
总的来说:kiska.net 中的二进制文件已经过时了。我强烈建议从 official download site or ideally build them on your own from source, see the documentation for building GnuCOBOL with VisualStudio.
获取更新的