Не могу найти клиентскую библиотеку PostgreSQL (libpq) - PullRequest
146 голосов
/ 02 июня 2011

Я пытаюсь установить 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 ]

346 голосов
/ 21 сентября 2011
$ 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...

РАБОТАЛ!

78 голосов
/ 29 апреля 2015

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

env ARCHFLAGS="-arch x86_64" gem install pg

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

ARCHFLAGS="-arch x86_64" bundle install

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

31 голосов
/ 08 июня 2011

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

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

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

23 голосов
/ 28 января 2015

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

brew install postgres

Тогда:

ARCHFLAGS="-arch x86_64" gem install pg

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

postgres -D /usr/local/var/postgres
21 голосов
/ 12 июня 2011

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

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
18 голосов
/ 16 июня 2011

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

6 голосов
/ 02 июня 2011

Подделка 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

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

5 голосов
/ 08 октября 2012

Проблема, с которой мы столкнулись, была довольно странной.

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

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

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

gem install bundler
3 голосов
/ 22 января 2017

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

$ sudo env ARCHFLAGS = "- arch x86_64" gem install pg - with-pg-include = / Библиотека / PostgreSQL / 9.6 / include /

3 голосов
/ 10 июня 2011

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

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