Какой самый простой способ вызвать Postgres из программы MinGW? - PullRequest
1 голос
/ 30 августа 2009

Все, что мне нужно, это заставить MinGW поговорить с Postgres. Я рассмотрел несколько вариантов:

  1. Используйте libpq. Libpq.lib, который поставляется с ссылками Postgres for Windows, хорошо, но вылетает, когда я использую библиотеку. Я думаю, потому что он был скомпилирован для VC ++. Я не могу найти только код libpq, поэтому мне придется перекомпилировать все дерево Postgres в MinGW. Нелегко.
  2. Используйте libpqxx. Требуется libpq!
  3. Используйте libodbcxx. Требуется какой-то ODBC-менеджер, такой как iodbc. Может быть, я могу использовать iodbc напрямую. Поскольку сейчас это только Windows, могу ли я использовать -lodbc на моем компоновщике и использовать некоторые специфичные для Windows команды?

Вариант 1 звучит наименее болезненно. Я почти уверен, что в проекте будет использоваться Postgres, но не уверен, что он останется в Windows. Есть ли простой способ получить эту функциональность?

Ответы [ 3 ]

4 голосов
/ 30 августа 2009

Вы можете перестроить просто libpq, если нужно. Запустите «./configure», а затем «make» в просто src / interfaces / libpq.

Но на самом деле встроенный в msvc libpq должен прекрасно работать с mingw. Это просто стандартная Windows DLL. Это может быть проблема с .lib - но DLL должна быть в порядке. AFAIK, только функциональность PQtrace () будет нарушена - из-за способа работы MSVCRT, который работает, только если у вас точно такая же версия среды выполнения.

Вы также должны иметь возможность генерировать библиотеку импорта непосредственно из DLL, если .LIB не работает. Или даже MingW позволяет вам напрямую связываться с DLL - смотрите их wiki

Получить libpq для работы, вероятно, намного проще, чем odbc.

1 голос
/ 30 августа 2009

Примечание: ваши CXXFLAGS и LDFLAGS для компиляции и связи с файлами Postgres могут быть легко настроены с использованием следующих переменных в вашем Makefile:

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

(При условии, что вы включили папку bin, которая содержит pg_config.exe вашей установки PostgreSQL, в PATH вашей системы и что вы используете mingw32-make.)

1 голос
/ 30 августа 2009

Поскольку вы также задавали здесь вопросы R, я предполагаю, что вам удастся прочитать исходные тексты пакетов R. Пакет RPostgreSQL делает именно то, что вам нужно:

  • Он использует MinGW, поскольку все двоичные файлы и пакеты R в Windows созданы с использованием MinGW
  • Это ссылка на libpq для общения с Postgres

Файл src / Makevars.win просто имеет

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

, который сообщает R, где находятся заголовки и библиотека Pg, а затем связывается с libpq.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...