1

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

  1. 使用 libpq。Postgres for Windows 附带的 libpq.lib 链接正常,但在我使用该库时崩溃。我想是因为它是为 VC++ 编译的。我找不到 libpq 代码,所以我必须在 MinGW 中重新编译整个 Postgres 树。不容易。
  2. 使用 libpqxx。需要libpq!
  3. 使用 libodbcxx。需要某种 ODBC 管理器,例如 iodbc。也许我可以直接使用iodbc。由于现在这只是 Windows,我可以在链接器上使用 -lodbc 并使用一些特定于 Windows 的命令吗?

选项 1 听起来最不痛苦。我很确定该项目将使用 Postgres,但不太确定该项目是否会保留在 Windows 上。有没有一种简单的方法来获得这个功能?

4

3 回答 3

4

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

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

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

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

于 2009-08-30T08:30:12.133 回答
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 链接。

于 2009-08-30T15:56:50.700 回答
1

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

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

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

于 2009-08-30T18:07:44.523 回答