微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从Cygwin运行C语言中的PostgreSQL客户端

我正在尝试用C语言在Cygwin上构建一个非常简单的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

从这里开始,我使用下面的makefile编译并链接了客户端程序:

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

我还没弄明白如何解决这个问题.任何指针都将非常感激.
哦,还有一件事,我找到了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

解决方法

通常在构建源代码之后的unix / linux系统上进行make install,将头文件复制到标准位置,如/usr/local/include和/usr/local/lib.您可能必须在cygwin上执行此操作才能在搜索路径中获取DLL.

或者您可以自己找到DLL并将其放在搜索路径上或与可执行文件位于同一文件夹中.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐