Неможливо знайти клієнтську бібліотеку PostgreSQL (libpq)


146

Я намагаюся встановити 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

Ви встановили версію 8.3 postgresql чи збирає стару установку? Якщо це 8,3, бібліотеки мають бути в /Library/PostgreSQL/8.3/lib, будь ласка, перевірте, чи він там є.
Ельке

Я зробив версію 8.3 і, так, схоже, все є.
Jason Swett

Чи можете ви розмістити вихід з pg_config? Це повинно полегшити нам допомогу.
justis

Мені довелося додати версію -v '0.14.0', щоб вона працювала з проектом mu
Matthieu Rouif

Відповіді:


347
$ 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 =" - арка x86_64 "gem install -v '0.14.0'", щоб вона працювала з моїм проектом
Matthieu Rouif

6
Працював для OS X Mavericks. Для мене цеenv ARCHFLAGS="-arch x86_64" gem install pg -v '0.17.1' -- --with-pg-config=/opt/local/lib/postgresql91/bin/pg_config
Dawei Yang,

17
І якщо ви використовуєте "Postgres.app", під мавериками вам слід зробити: env ARCHFLAGS = "- arch x86_64 gem install pg - --with-pg-config = / Applications / Postgres.app / Contents / Versions / 9.3 / bin / pg_config (Припустимо, ви використовуєте Postgres.app версії 9.3, оскільки місце розташування pg_config може бути змінено, якщо ви використовуєте іншу версію, але все одно ви можете її знайти)
Zhaonan

2
Це працювало для мене і перервало 2 години зупинки. Я новачок у рейках, і це засмучувало. Як і попередній коментатор, я використовував інсталятор Postgres.app на Mavericks. Не усвідомлював, що змінна ARCHFLGS env була настільки важливою. Пояснення тут.
GNat

3
Питання в тому, чому це працює? Що робить "ARCHFLAGS =" - арка x86_64 ", і чому не працює встановлення самоцвіту з ванілі? Встановити дорогоцінний камінь не повинно бути таким складним.
Джаред Менар

78

Я спробував найкращу відповідь тут:

env ARCHFLAGS="-arch x86_64" gem install pg

Але коли я спробував запустити інсталяцію пакета ще раз, у нього була та сама помилка. Потім я спробував встановити весь пакет із ARCHFLAGS так:

ARCHFLAGS="-arch x86_64" bundle install

Працювали для мене! Не забудьте замінити x86_64 на i386, залежно від архітектури.


2
Дуже дякую. Це те, що працювало для мене. Я намагаюся вирішити цю проблему ще годину плюс, і цей код - це те, що зробив - ARCHFLAGS = "- арка x86_64" встановити пакет
piratetone

Додаток @piratetone тут працював для мене на Високій Сьєррі
tnaught

Вдячний за @Christine, він працював для мене на Високій Сьєррі
Ymow Wu

31

У мене просто виникала ця проблема під час використання EnterpiseDB .dmg. Якщо ви вважаєте те саме, що ви використовували, я змусив його працювати, вказавши правильну архітектуру:

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

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


6
x86_64 працював для мене (Mac OS 10.6.8, встановлено PostgreSQL через homebrew: mxcl.github.com/homebrew )
chesterbr

2
Використовували години, щоб знайти рішення, і ваше працювало, bobfet1 & @chester. Дякую! :-))) ** sudo env ARCHFLAGS = "- арка x86_64" gem install pg **
rassom

24

Якщо ви використовуєте Yosemite:

brew install postgres

Тоді:

ARCHFLAGS="-arch x86_64" gem install pg

І (необов’язково), нарешті, якщо ви хочете запустити автовакуум ...

postgres -D /usr/local/var/postgres

21

Можливо, ви можете спробувати це:

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

+1 Дякую за підказку про те, якою архітектурою була моя бібліотека!
Спайк

Також перевірте архітектуру рубінового бінарного файлу.
Леопд

18

Рішення: перевстановлено PostgreSQL з Homebrew.


1
Вітаю! Не забудьте присвоїти винагороду комусь. Кілька людей намагалися допомогти, навіть якщо це не було остаточним рішенням, а бали репутації вже були витрачені, коли ви запропонували виграш.
justis

2
Не впевнений, чому це отримано -1, працював для мене, коли не використовували інші методи
Абе Петрілло,

Я також змусив використати метод ARCHFLAGS, але він не працював, поки не перевстановив postresql з homebrew.
Дейв Коуарт

Працював у Йосеміті (10.10.3). варити встановити PostgreSQL
roosevelt

Це не спрацювало для мене. Цікаво, чи це щось стосується того, що я використовую "вбудований" Рубі (я думаю) замість чогось іншого: |
rogerdpack

6

Підроблені з 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

Це має зробити це за вас. Дайте мені знати, якщо це не так.


Я використовував інсталятор одним клацанням замість MacPorts для PostgreSQL. Я не знаю, якою була б рівнозначна команда.
Jason Swett

Подивіться, чи пощастить вам із цим (я думаю, оновлений сценарій Mac працює в ніч на суботу):locate pg_config
Шон

Я досі не знаю, що це значить для CPPFLAGSабо LDFLAGS(не знаю, що це, вибачте).
Jason Swett

О, але все locate pg_configж показали мені деякі речі. І я спробував просто встановити PostgreSQL через MacPorts і використовувати вашу команду - не вийшло.
Jason Swett

1
Оновлено наведений вище приклад. Я вірю, що це вирішить вашу проблему. Улов був тим, що LDFLAGSне було встановлено в каталог, який містив libpq. Детальніше див. Вище.
Шон

5

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

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

але коли ми зробили встановлення пакета насправді, bundler не був встановлений для версії ruby, встановленої rbenv, тому, коли ми набирали встановлення пакета, він використовував bundler системи.

Тому перед тим, як запустити інсталяцію пакета, переконайтеся, що ви встановили пакет, запустивши

gem install bundler

Це працювало в моєму випадку (свіжий macOS High Sierra, використовуючи rbenv та встановлюючи здебільшого заварку). Пачка, ймовірно, використовувала речі з яблука, в цьому і була проблема ...
saza

3

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

Вам не слід запускати gem install pgяк root, адже якщо ви зробите це, швидше за все, ваш PATH (PATH 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

Запуск gem install pg(разом з вашими двома попередніми командами) замість того, щоб sudo gem install pgвсе-таки давати абсолютно однакові результати.
Джейсон Світт

Ви маєте 32- чи 64-бітну архітектуру? Ви пробували вище з іншим прапором архітектури? Ви також змінили /Library/PostgreSQL/...правильне місце, де б не була ваша копія установки postgres?
Бретт Бендер

Заглянув у мої записки про виконання перерахованих мною команд. Схоже, я встановив Postgres через sudo port install postgresql83 postgresql83-server, схожий на ці інструкції: flux88.com/2010/06/installing-postgresql-for-rails-on-mac-os-x . Здається, що окремий інсталятор 32-розрядний, тому ви хочете встановити свої аркові прапори на 32-розрядні, навіть якщо ваша машина 64-розрядна. Якщо ви не можете змусити його працювати, я б запропонував видалити та перевстановити через MacPorts, а потім спробувати вказані вище інструкції. Сподіваюся, що це допомагає!
Бретт Бендер

3

Ось що, нарешті, зробило це для мене (поєднання декількох рішень, наданих раніше разом з іншими посадами):

$ sudo env ARCHFLAGS = "- арка x86_64" gem встановити pg - with-pg-include = / Бібліотека / PostgreSQL / 9.6 / include /


Вищевказане рішення працювало для мене в 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 Знайдіть точний шлях до папки включення та оновіть її відповідно.
maniempire

1

ARCHFLAGSВідповідь , що інші запропонували не працювати , якщо ви як - то в кінцевий результаті з 64-розрядної версії Postgres (який доморощений встановить) і 32-розрядну версію рубіна с. Чомусь rbenvнаполягає на тому, щоб створити ruby ​​1.9.2-p290 як 32-розрядний для мене, що унеможливлює зв'язок із 64-бітними postgres.

Перевірте архітектуру свого рубінового бінарного с

file `which ruby`

або якщо використовується rbenv

file `rbenv which ruby`

І порівняйте з вашими постгресами:

file `which postgres`

Якщо є невідповідність, вам потрібно буде перевстановити postgres або ruby. З rbenv я вирішив це лише перейшовши на іншу версію: 1.9.3-p194замість 1.9.2-p290.


1

Ось як я змусив її працювати над Mavericks. Примітка: я вже встановив postgresql 9.3 від homebrew.

  1. Оновіть Xcode на 5.0 з App Store

  2. Встановіть інструменти для розробників командного рядка

    xcode-select - встановіть

  3. Погодьтесь на ліцензію Xcode

    sudo xcodebuild -license

  4. Встановіть дорогоцінний камінь

    ARCHFLAGS = "- арка x86_64" gem встановити pg



0

Я, мабуть, трохи запізнився на вечірку тут, але в моєму випадку я використовував rbenv та переходив на Ruby 2.2.3. Мені довелося встановити Bundler, щоб я працював, у мене була стара версія системи.

gem install bundler


0

Як було сказано вище, це пов'язане з тим, що на 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змушує дорогоцінний камінь, x86_64щоб використовувати цю команду:

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

Пам’ятайте, що ви маєте bash_profileв курсі

Додайте шлях своїх поштових адрес, у цьому випадку я використовую за допомогою програми Postgres ( OSX) замість brew( https://postgresapp.com/ ) за замовчуванням це розташування:

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

Перезавантажте bash

sudo vi ~/.bash_profile

Після цього я зміг нарешті успішно встановити pg gem

Сподіваюся, це допомагає!


0

На Mac ви можете спробувати це (працює для мене): gem install pg - with-pg-include = / Library / PostgreSQL / 9.5 / include Fetching: pg-1.0.0.gem (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" ви повинні покласти шлях Postgres)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.