Не удается найти клиентскую библиотеку 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

16 ответов


$ 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...

работала!


я попробовал лучший ответ здесь:

env ARCHFLAGS="-arch x86_64" gem install pg

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

ARCHFLAGS="-arch x86_64" bundle install

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


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

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

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


при использовании Yosemite:

brew install postgres

затем:

ARCHFLAGS="-arch x86_64" gem install pg

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

postgres -D /usr/local/var/postgres

может быть, вы можете попробовать это:

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

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


фейк из 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

это должно сделать это за вас. Дай мне знать, если нет.--10-->


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

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

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

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

gem install bundler

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

вам не нужно работать gem install pg как root, на самом деле, если вы это сделаете, скорее всего, ваш путь (путь root, если запустить 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

Это то, что наконец-то сделал это для меня (комбинация нескольких решений, наряду с другими должностей):

$ судо ОКР ARCHFLAGS="-Арч x86_64 с" жемчужиной установки пг-с-ПГ-включать=/библиотеки/PostgreSQL и/9.6/числе/


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

Проверьте архитектуру вашего Ruby binary с помощью

file `which ruby`

или при использовании rbenv

file `rbenv which ruby`

и сравните с вашими и Postgres:

file `which postgres`

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


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

  1. обновление Xcode до 5.0 из App Store

  2. установить средства разработчика командной строки

    xcode-выберите --install

  3. согласиться с лицензией Xcode

    sudo xcodebuild-лицензия

  4. установить gem

    ARCHFLAGS=" - arch x86_64 " gem установить pg


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

brew install postgres

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

gem install bundler


как упоминалось выше, это связано с тем, что на rbenv есть две рубиновые арки /usr/bin/ruby: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [i386:Mach-O executable i386] то, что я должен был сделать, это просто установить pg gem forcing x86_64 arch для использования с этой командой:

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

не забудьте иметь свой bash_profile до свидания

добавить путь вашего postgres, в этом случае im с помощью приложения Postgres (OSX) вместо brew (https://postgresapp.com/) по умолчанию это местонахождение:

export PATH=/Applications/Postgres.app/Contents/Versions/10/bin:$PATH

перезагрузить bash с

sudo vi ~/.bash_profile

после этого я смог, наконец, успешно установить pg gem

надеюсь, что это помогает!


на Mac вы можете попробовать это (у меня работает): gem install pg -- with-pg-include= / библиотека / PostgreSQL/9.5 / включить Выборка: pg-1.0.0.Гэм (100%) Создание собственных расширений с помощью: 'with-pg-include= / Library / PostgreSQL/9.5 / include' Это может занять некоторое время... Успешно установлен pg-1.0.0 Разбор документации для pg-1.0.0 Установка документации ri для pg-1.0.0 Завершена установка документации для pg через 3 секунды 1 камень установлен

(эта часть "/ Library / PostgreSQL/9.5 / include " you должен поставить свой путь Postgres)