Не удается найти клиентскую библиотеку PostgreSQL (libpq)

Я пытаюсь установить PostgreSQL для Rails в Mac OS X 10.6. Сначала я попробовал установку MacPorts, но это не помогло, поэтому я установил установку DMG с одним щелчком мыши. Это, похоже, сработало.

Я подозреваю, что мне нужно установить пакеты разработки PostgreSQL, но я не знаю, как это сделать на OS X.

Вот что я получаю, когда пытаюсь сделать sudo gem install pg:

$ sudo gem install pg
Building native extensions.  This could take a while...
ERROR:  Error installing pg:
    ERROR: Failed to build gem native extension.

        /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb
checking for pg_config... yes
Using config values from /Library/PostgreSQL/8.3/bin/pg_config
checking for libpq-fe.h... yes
checking for libpq/libpq-fs.h... yes
checking for PQconnectdb() in -lpq... no
checking for PQconnectdb() in -llibpq... no
checking for PQconnectdb() in -lms/libpq... no
Can't find the PostgreSQL client library (libpq)
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.

Provided configuration options:
    --with-opt-dir
    --without-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby
    --with-pg
    --without-pg
    --with-pg-dir
    --without-pg-dir
    --with-pg-include
    --without-pg-include=${pg-dir}/include
    --with-pg-lib
    --without-pg-lib=${pg-dir}/lib
    --with-pg-config
    --without-pg-config
    --with-pg_config
    --without-pg_config
    --with-pqlib
    --without-pqlib
    --with-libpqlib
    --without-libpqlib
    --with-ms/libpqlib
    --without-ms/libpqlib


Gem files will remain installed in /Library/Ruby/Gems/1.8/gems/pg-0.11.0 for inspection.
Results logged to /Library/Ruby/Gems/1.8/gems/pg-0.11.0/ext/gem_make.out

Ответ 1

Решение: переустановил PostgreSQL с помощью Homebrew.

Ответ 2

$ sudo su

$ env ARCHFLAGS="-arch x86_64" gem install pg

Building native extensions.  This could take a while...
Successfully installed pg-0.11.0
1 gem installed
Installing ri documentation for pg-0.11.0...
Installing RDoc documentation for pg-0.11.0...

РАБОТАЛ!

Ответ 3

Я попробовал самый высокий рейтинг здесь:

env ARCHFLAGS="-arch x86_64" gem install pg

Но когда я снова попробовал запустить пакет, у него была такая же ошибка. Затем я попробовал установить весь комплект с ARCHFLAGS следующим образом:

ARCHFLAGS="-arch x86_64" bundle install

Работал для меня! Обязательно замените x86_64 на i386 в зависимости от архитектуры.

Ответ 4

У меня была эта проблема при использовании EnterpiseDB.dmg. Если это то же самое, что вы использовали, я получил его для работы, указав правильную архитектуру:

sudo env ARCHFLAGS="-arch i386" gem install pg

В Интернете есть несколько учебных пособий, в которых говорится, что они указывают другую архитектуру (например, "-arch x86_64" для людей, которые использовали MacPorts), но она не работала для меня, потому что я использовал установку одного файла.

Ответ 5

Возможно, вы можете попробовать следующее:

ARCHFLAGS="-arch i386 -arch x86_64" gem install pg

Чтобы узнать архитектуру вашей библиотеки, вы можете использовать

file /usr/local/lib/libpq.dylib 

который дал только 1 архитектуру в моем случае (установлен через homebrew):

/usr/local/lib/libpq.dylib: Mach-O 64-bit dynamically linked shared library x86_64

Ответ 6

Если вы используете Yosemite:

brew install postgres

Тогда:

ARCHFLAGS="-arch x86_64" gem install pg

И (необязательно), наконец, если вы хотите запустить autovacuum...

postgres -D /usr/local/var/postgres

Ответ 7

Подчините gem, префикс соответствующих переменных окружения. Если вы устанавливали с MacPorts, вы должны пройти следующую процедуру:

% /opt/local/lib/postgresql91/bin/pg_config
BINDIR = /opt/local/lib/postgresql91/bin
DOCDIR = /opt/local/share/doc/postgresql
HTMLDIR = /opt/local/share/doc/postgresql
INCLUDEDIR = /opt/local/include/postgresql91
PKGINCLUDEDIR = /opt/local/include/postgresql91
INCLUDEDIR-SERVER = /opt/local/include/postgresql91/server
LIBDIR = /opt/local/lib/postgresql91
PKGLIBDIR = /opt/local/lib/postgresql91
LOCALEDIR = /opt/local/share/locale
MANDIR = /opt/local/share/man
SHAREDIR = /opt/local/share/postgresql91
SYSCONFDIR = /opt/local/etc/postgresql91
PGXS = /opt/local/lib/postgresql91/pgxs/src/makefiles/pgxs.mk
CONFIGURE = '--prefix=/opt/local' '--sysconfdir=/opt/local/etc/postgresql91' '--bindir=/opt/local/lib/postgresql91/bin' '--libdir=/opt/local/lib/postgresql91' '--includedir=/opt/local/include/postgresql91' '--datadir=/opt/local/share/postgresql91' '--mandir=/opt/local/share/man' '--with-includes=/opt/local/include' '--with-libraries=/opt/local/lib' '--with-openssl' '--with-bonjour' '--with-readline' '--with-zlib' '--with-libxml' '--with-libxslt' '--enable-thread-safety' '--enable-integer-datetimes' '--with-ossp-uuid' 'CC=/usr/bin/gcc-4.2' 'CFLAGS=-pipe -O2 -arch x86_64' 'LDFLAGS=-L/opt/local/lib -arch x86_64' 'CPPFLAGS=-I/opt/local/include -I/opt/local/include/ossp'
CC = /usr/bin/gcc-4.2
CPPFLAGS = -I/opt/local/include -I/opt/local/include/ossp -I/opt/local/include/libxml2 -I/opt/local/include
CFLAGS = -pipe -O2 -arch x86_64 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wformat-security -fno-strict-aliasing -fwrapv
CFLAGS_SL = 
LDFLAGS = -L/opt/local/lib -arch x86_64 -L/opt/local/lib -L/opt/local/lib -Wl,-dead_strip_dylibs
LDFLAGS_EX = 
LDFLAGS_SL = 
LIBS = -lpgport -lxslt -lxml2 -lssl -lcrypto -lz -lreadline -lm 
VERSION = PostgreSQL 9.1beta1

Оттуда вытащите LIBDIR, INCLUDEDIR, CPPFLAGS, LIBS и LDFLAGS (тем не менее, я думаю, что вы будете работать LIBDIR). Затем вы запустите:

setenv PATH /opt/local/lib/postgresql91/bin:${PATH}
sudo env LDFLAGS=-L`pg_config --libdir` CPPFLAGS=`pg_config --cppflags` gem install pg

Это должно сделать это за вас. Дайте мне знать, если это не так.

Ответ 8

Проблема у нас была довольно странная.

ruby -v # was ok (rbenv)
gem -v # was ok (rbenv)

но когда мы установили пакет, на самом деле, пакет не был установлен для версии ruby, которая была установлена ​​rbenv, поэтому, когда мы набрали установку пакета, она использовала комплектщик системы.

Итак, перед запуском установки пакета убедитесь, что вы установили пакет, выполнив

gem install bundler

Ответ 9

Я не думаю, что вам нужны файлы разработки postgres, все, что вам нужно, должно быть включено в ваш установщик. Скорее всего, что путь, к которому они установлены, не находится в вашем пути к среде, и поэтому камень не может найти их, когда он пытается скомпилировать pg.

Вам не нужно запускать gem install pg как root, на самом деле, если вы это сделаете, ваш PATH (root PATH, если вы запустите w/sudo) не будет содержать необходимую информацию.

Для меня обычно работает следующее:

# Might be different depending on where your installer installed postgres 8.3
export PATH=$PATH:/Library/PostgreSQL/8.3/include/
export ARCHFLAGS='-arch x86_64'
gem install pg

Ответ 10

Это то, что окончательно сделало это для меня (сочетание нескольких решений, предоставленных перед другими сообщениями):

$sudo env ARCHFLAGS = "- arch x86_64" gem install pg - with-pg-include =/Library/PostgreSQL/9.6/include/

Ответ 11

Ответ ARCHFLAGS, который другие предложили, не будет работать, если вы каким-то образом закончите с 64-разрядной версией postgres (который будет установлен homebrew) и 32-разрядной версией ruby. По какой-то причине rbenv настаивает на создании Ruby 1.9.2-p290 как 32-битный для меня, что делает невозможным связывание с 64-разрядными postgres.

Проверьте архитектуру вашего рубинового двоичного файла с помощью

file `which ruby`

или если используется rbenv

file `rbenv which ruby`

И сравните с вашими postgres:

file `which postgres`

Если есть неправильное совпадение, вам нужно будет переустановить postgres или ruby. С rbenv я решил это, просто переключившись на другую версию: 1.9.3-p194 вместо 1.9.2-p290.

Ответ 12

Вот как я сделал это для работы с Маверикс. Примечание. Я уже установил postgresql 9.3 из homebrew.

  • Обновить Xcode до 5.0 из App Store

  • Установите средства разработки командной строки

    xcode-select --install

  • Согласиться на лицензию Xcode

    sudo xcodebuild -license

  • Установить драгоценный камень

    ARCHFLAGS = "- arch x86_64" gem install pg

Ответ 13

Итак, в основном я это сделал; -)

brew install postgres

Ответ 14

Вероятно, я немного опаздываю на вечеринку, но в моем случае я использовал rbenv и обновлялся до Ruby 2.2.3. Мне пришлось установить Bundler, чтобы заставить мой работать, у меня была старая версия системы.

gem install bundler