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

129

Я пытаюсь установить 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
  • 0
    Вы установили версию 8.3 из postgresql или это старая установка? Если это 8.3 библиотеки должны быть в /Library/PostgreSQL/8.3/lib, пожалуйста, проверьте, если это там.
  • 0
    Я сделал версию 8.3 и, да, похоже, все есть.
Показать ещё 2 комментария
Теги:
rubygems
ruby-on-rails-3

14 ответов

18
Лучший ответ

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

  • 1
    Congrats! Не забудьте присуждать награду кому-то. Несколько человек изо всех сил пытались помочь, даже если это не было окончательным решением, а очки репутации уже были потрачены, когда вы предлагали вознаграждение.
  • 2
    Не уверен, почему это получил -1, работал для меня, когда не из других методов сделал
Показать ещё 4 комментария
309
$ 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...

РАБОТАЛ!

  • 2
    Мне пришлось добавить версию "env ARCHFLAGS =" - arch x86_64 "gem install -v '0.14.0'", чтобы она работала с моим проектом
  • 0
    после 3 дней охоты и пекинства это работает. Потрясающие!
Показать ещё 12 комментариев
53

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

env ARCHFLAGS="-arch x86_64" gem install pg

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

ARCHFLAGS="-arch x86_64" bundle install

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

  • 2
    Огромное спасибо. Это то, что сработало для меня. Я пытался решить эту проблему в течение часа плюс, и этот код - то, что сделал это - ARCHFLAGS = "- arch x86_64" комплекта установки
  • 0
    Добавление @piratetone здесь работало для меня на Высокой Сьерре
Показать ещё 1 комментарий
29

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

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

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

  • 1
    Это тоже не сработало. Я пробовал и x86_64 и i386.
  • 6
    x86_64 работал для меня (Mac OS 10.6.8, PostgreSQL, установленный через homebrew: mxcl.github.com/homebrew )
Показать ещё 1 комментарий
20

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

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
  • 0
    +1 Спасибо за подсказку о знании архитектуры моей библиотеки!
  • 0
    Также проверьте архитектуру вашего двоичного файла ruby.
18

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

brew install postgres

Тогда:

ARCHFLAGS="-arch x86_64" gem install pg

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

postgres -D /usr/local/var/postgres
  • 0
    Спасибо! это сработало на Йосемити
5

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

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

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

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

gem install bundler
  • 0
    В моем случае это сработало (свежая macOS High Sierra, с использованием rbenv и установка в основном с brew). Bundle, вероятно, использовал вещи от Apple, вот в чем проблема ...
5

Подчините 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

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

  • 0
    Я использовал установщик одним щелчком вместо MacPorts для PostgreSQL. Я не знаю, какой будет эквивалентная команда.
  • 0
    Посмотрите, повезет ли вам с этим (я думаю, что скрипт updatedb для Mac запускается в субботу вечером): locate pg_config
Показать ещё 7 комментариев
3

Я не думаю, что вам нужны файлы разработки 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
  • 0
    Запуск gem install pg (вместе с двумя предыдущими командами) вместо sudo gem install pg прежнему дает те же результаты.
  • 0
    Вы на 32- или 64-битной архитектуре? Вы пробовали выше с другим флагом архитектуры? Также вы изменили /Library/PostgreSQL/... на правильное местоположение, где находится ваша копия установки postgres?
Показать ещё 1 комментарий
2

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

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

  • 0
    Приведенное выше решение помогло мне в Mac OS High Sierra sudo env ARCHFLAGS = "- arch x86_64" gem install pg -v '1.1.2' - with-pg-include = / usr / local / Cellar / postgresql / 10.5 / include Найдите точный путь для папки include и обновите его соответствующим образом.
1

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

brew install postgres
  • 0
    Brew устанавливает libpq.so (dylib), как следует из вашего ответа?
1

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

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

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

    xcode-select --install

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

    sudo xcodebuild -license

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

    ARCHFLAGS = "- arch x86_64" gem install pg

1

Ответ 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.

0

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

gem install bundler

Ещё вопросы

Сообщество Overcoder
Наверх
Меню