2

私は現在、この 4 人のチームで問題に直面しています。

kiskaのサイトでダウンロードしたバイナリを使用します。cobol を C にcobcrunコンパイルして実行するか、実行可能ファイルにコンパイルすることができます。しかし、opencobol で postgres コマンドを見つけることができません。

これが私のCOBOLスクリプトのストラトです:

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ライブラリの call メソッドのコードを掘り下げた後。環境変数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 をコンパイルしようとしましたが、同じ結果でしたが、何かを見落としている可能性があります。

何が欠けていますか?

4

1 に答える 1

3

COB_PRE_LOAD は、パスや拡張子を取りません。使用可能なランタイム構成については、短いドキュメントを参照してください。私は推測する

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 のバイナリはかなり古くなっています。公式のダウンロード サイトから新しいものを入手するか、理想的にはソースから独自にビルドすることを強くお勧めします。VisualStudio を使用して GnuCOBOL をビルドするためのドキュメントを参照してください。

于 2016-11-03T19:03:59.253 に答える