5

Cygwin を介して C で非常に単純な PostgreSQL クライアントを構築しようとしています。

これまでに行ったことは次のとおりです。

  • PostgreSQL ソース コード バージョン 9.1.2 をダウンロードしました (サーバーで実行されているのと同じバージョンに一致させるため)
  • Cygwin からソース コードを構成してコンパイルしました。コンパイルは順調に進んだようです。
  • 私が知る限り、ヘッダーファイルは次の場所にあります。
    • /cygdrive/c/workspace/src/postgresql-9.1.2/src/interfaces/libpq、および
    • /cygdrive/c/workspace/src/postgresql-9.1.2/src/include
  • ライブラリは次の場所にあります。
    • /cygdrive/c/workspace/src/postgresql-9.1.2/src/interfaces/libpq

ここから、以下のメイクファイルを使用してクライアント プログラムをコンパイルおよびリンクしました。

testlibpq: testlibpq.c
    gcc -o testlibpq -I /cygdrive/c/workspace/src/postgresql-9.1.2/src/interfaces/libpq -I /cygdrive/c/workspace/src/postgresql-9.1.2/src/include -L /cygdrive/c/workspace/src/postgresql-9.1.2/src/interfaces/libpq testlibpq.c -Bstatic -lpq

コンパイルとリンクは、エラーや警告なしで成功しました。

ただし、プログラムを実行しようとすると、次のエラーが発生します。

$ ./testlibpq
/cygdrive/c/Users/dleclair/Dropbox/denis/src/testlibpq/testlibpq.exe: error while loading shared libraries: cygpq.dll: cannot open shared object file: No such file or directory

これを修正する方法がわかりません。任意のポインタをいただければ幸いです。ああ、もう 1 つ、cygpq.dll が置かれているフォルダーを見つけて、それを指すように LD_LIBRARY_PATH を設定しましたが、それでも同じ結果が得られました。

dleclair@dleclair-win7l ~/Dropbox/denis/src/testlibpq
$ ls /cygdrive/c/workspace/src/postgresql-9.1.2/src/interfaces/libpq
bcc32.mak      encnames.o    fe-connect.o  fe-misc.o       fe-protocol3.o   ip.o           libpq-events.c  md5.c                   pgstrcasecmp.c  pqsignal.c       thread.o
blibpqdll.def  exports.txt   fe-exec.c     fe-print.c      fe-secure.c      libpq.a        libpq-events.h  md5.o                   pgstrcasecmp.o  pqsignal.h       wchar.c
chklocale.c    fe-auth.c     fe-exec.o     fe-print.o      fe-secure.o      libpq.rc.in    libpq-events.o  nls.mk                  po              pqsignal.o       wchar.o
chklocale.o    fe-auth.h     fe-lobj.c     fe-protocol2.c  inet_net_ntop.c  libpqddll.def  libpq-fe.h      noblock.c               pqexpbuffer.c   pthread-win32.c  win32.c
cygpq.dll      fe-auth.o     fe-lobj.o     fe-protocol2.o  inet_net_ntop.o  libpq-dist.rc  libpq-int.h     noblock.o               pqexpbuffer.h   README           win32.h
encnames.c     fe-connect.c  fe-misc.c     fe-protocol3.c  ip.c             libpqdll.def   Makefile        pg_service.conf.sample  pqexpbuffer.o   thread.c         win32.mak

dleclair@dleclair-win7l ~/Dropbox/denis/src/testlibpq
$ echo $LD_LIBRARY_PATH
/cygdrive/c/workspace/src/postgresql-9.1.2/src/interfaces/libpq

dleclair@dleclair-win7l ~/Dropbox/denis/src/testlibpq
4

1 に答える 1

1

通常、UNIX/Linux システムでは、ソースのビルド後に make install が実行され、ヘッダーが /usr/local/include や /usr/local/lib などの標準的な場所にコピーされます。検索パスでDLLを取得するには、cygwinでこれを行う必要がある場合があります。

または、自分で DLL を見つけて、検索パスまたは実行可能ファイルと同じフォルダーに配置することもできます。

于 2012-11-04T07:09:11.083 に答える