Стек не может найти libpq, когда указан каталог

Я пытаюсь настроить проект стека, в котором среди прочего используется пакет postgresql-simple. При попытке stack build все зависимости для postgresql-simple устанавливаются без проблем, но у стека возникают проблемы с установкой самого postgresql-simple. Я получаю следующую ошибку:

C:project> stack build --extra-include-dirs="C:\PostgreSQL\8.4\include" --extra-lib-dirs="C:\PostgreSQL\8.4\lib"

... omitted ...

*****************
--extra-include-dirs=C:\PostgreSQL\8.4\include
*****************
--extra-include-dirs=C:\Users\User\AppData\Local\Programs\stack\x86_64-windows\msys2-20150512\mingw32\include 
--extra-include-dirs=C:\Users\User\AppData\Local\Programs\stack\x86_64-windows\msys2-20150512\mingw64\include 
*****************
--extra-lib-dirs=C:\PostgreSQL\8.4\lib
***************************** 
--extra-lib-dirs=C:\Users\User\AppData\Local\Programs\stack\x86_64-windows\msys2-20150512\mingw32\lib 
--extra-lib-dirs=C:\Users\User\AppData\Local\Programs\stack\x86_64-windows\msys2-20150512\mingw64\lib
Process exited with code: ExitFailure 1
Logs have been written to: C:\Users\User\Desktop\draftkings\NFAccuracy\.stack-work\logs\postgresql-libpq-0.9.1.1.log

Configuring postgresql-libpq-0.9.1.1...
Setup.hs: Missing dependency on a foreign library:
* Missing C library: pq
This problem can usually be solved by installing the system package that
provides this library (you may need the "-dev" version). If the library is
already installed but in a non-standard location then you can use the flags
--extra-include-dirs= and --extra-lib-dirs= to specify where it is.

Я также пытался указать пути в моем файле stack.yaml, та же ошибка.

Я попытался вручную скопировать библиотеку и включить файлы из моей установки postgres в упомянутые папки ...\mingw64\lib и ...\mingw64\include. Та же ошибка.

У меня есть файлы libpq.dll и libpq.lib в папке C:\PostgreSQL\8.4\lib.

Я чувствую, что упускаю что-то очевидное, но я не могу заставить это работать, и я не уверен, что делаю неправильно. Любая помощь приветствуется.

Обновить

Я забыл упомянуть две важные детали.

Во-первых, я добавил C:\PostgreSQL\8.4\bin в свой PATH. Насколько я знаю, это работает, как и ожидалось, потому что я перешел от ошибки об отсутствии pg_config к ошибке, которая у меня есть сейчас.

Во-вторых, я также попытался добавить каталоги lib и include в свой PATH, но это не изменило ошибку.

Я также должен упомянуть, что моя установка Postgres прекрасно работает сама по себе.


person parker.sikand    schedule 14.10.2015    source источник


Ответы (2)


Я знаю, что проект Snowdrift использует PostgreSQL и строится с помощью Stack в Windows. На их сайте есть руководство по сборке. Похоже, одно отличие состоит в том, что они упоминают:

Добавьте каталог bin PostgreSQL в путь C:\Program Files (x86)\PostgreSQL\9.4\bin

Можете ли вы попробовать добавить это в PATH и посмотреть, исправит ли это?

person Michael Snoyman    schedule 15.10.2015
comment
Спасибо за ваш ответ. Я забыл упомянуть, что уже сделал это. Смотрите обновленный вопрос. Я посмотрю руководство по сборке, чтобы увидеть, есть ли что-то еще, что я пропустил. - person parker.sikand; 15.10.2015
comment
Использование Postgres 9.4, похоже, сработало. Я пробовал 8.4, потому что он соответствовал моему удаленному серверу. Все еще исследую. - person parker.sikand; 15.10.2015
comment
Использование Postgres 9.4 в качестве моего «клиента» заставило мой код haskell работать нормально, даже при обмене данными с удаленной базой данных Postgres 8.4. Кажется, что требования к версии для клиентских библиотек Postgres недокументированы. Для меня сейчас все хорошо. Спасибо за внимание Михаил. - person parker.sikand; 23.10.2015

Было какое-то несоответствие версий.

Установка Postgres 9.4 вместо 8.4 позволила собрать пакет postgresql-simple так, как я пытался.

Мой стековый проект без моего вмешательства по умолчанию использовал resolver: 'lts-3.7' Это предоставило моему проекту версию 0.4.10.0 пакета postgresql-simple. Хотел бы я получить более подробный ответ, но все, что я могу сказать, это то, что эта версия postgresql-simple (которая является довольно новой) прекрасно работает с PostgreSQL 9.4 (которая также является последней).

И, к счастью, использование haskell и postgresql-simple, созданных для библиотек Postgres 9.4, не вызывает проблем при обмене данными с моей «удаленной» базой данных (virtualbox), которой является Postgres 8.4.

У меня возникает соблазн отметить мой вопрос как неконструктивный, если другие не найдут эту полезную информацию.

person parker.sikand    schedule 23.10.2015