从MinGW程序调用Postgres最简单的方法是什么?

时间:2009-08-30 05:34:34

标签: c++ postgresql mingw

我所需要的只是让MinGW与Postgres交谈。我考虑了几个选择:

  1. 使用libpq。 Postgres for Windows附带的libpq.lib链接没问题,但是当我使用该库时崩溃了。我认为因为它是为VC ++编译的。我找不到libpq代码,所以我必须在MinGW中重新编译整个Postgres树。不容易。
  2. 使用libpqxx。需要libpq!
  3. 使用libodbcxx。需要某种类似于iodbc的ODBC管理器。也许我可以直接使用iodbc。既然这只是Windows,我可以在我的链接器上使用-lodbc并使用一些Windows特定的命令吗?
  4. 选项1听起来最不痛苦。我很确定该项目将使用Postgres,不太确定该项目是否会保留在Windows上。有没有一种简单的方法来获得这个功能?

3 个答案:

答案 0 :(得分:4)

如果必须,您可以重建libpq。运行“./configure”,然后在src / interfaces / libpq中运行“make”。

但实际上,msvc构建的libpq应该可以正常使用mingw。它只是一个标准的Windows DLL。它可能是.lib的问题 - 但DLL应该没问题。 AFAIK,只有PQtrace()功能会被破坏 - 因为MSVCRT的工作方式,只有在你拥有完全相同的运行时版本时才有效。

如果.LIB不起作用,您还应该能够直接从DLL生成导入库。或者,MingW甚至允许您直接链接到DLL - 请参阅他们的wiki

让libpq工作可能比odbc容易得多。

答案 1 :(得分:1)

正如您在此处提出的R问题,我假设您可以设法读取R包的源代码。 RPostgreSQL包完全符合您的要求:

  • 它使用MinGW,因为Windows上的所有R二进制文件和包都是使用MinGW构建的
  • 链接到libpq与Postgres交谈

文件src / Makevars.win只有

PKG_CPPFLAGS=-I"${PG_HOME}"/include
PKG_LIBS=-L"${PG_HOME}"/lib -llibpq

告诉R Pg头和库的位置,然后链接libpq。

答案 2 :(得分:1)

附注...您可以使用Makefile中的以下变量轻松设置用于编译和链接Postgres文件的CXXFLAGS和LDFLAGS:

CXXFLAGS += -I$(shell pg_config --includedir)
LDFLAGS += -L$(shell pg_config --libdir) -llibpq

(前提是您在系统的PATH中包含了包含PostgreSQL安装的pg_config.exe的bin文件夹,并且使用了mingw32-make。)