Nie można znaleźć biblioteki klienta PostgreSQL (libpq)


146

Próbuję zainstalować PostgreSQL dla Railsów na Mac OS X 10.6. Najpierw wypróbowałem instalację MacPorts, ale nie poszło dobrze, więc wykonałem instalację DMG jednym kliknięciem. To wydawało się działać.

Podejrzewam, że muszę zainstalować pakiety programistyczne PostgreSQL, ale nie mam pojęcia, jak to zrobić na OS X.

Oto, co otrzymuję, gdy próbuję to zrobić 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

Czy zainstalowałeś wersję 8.3 postgresql, czy też pobiera jakąś starą instalację? Jeśli jest to biblioteka 8.3, powinny znajdować się w /Library/PostgreSQL/8.3/lib, sprawdź, czy tam jest.
Eelke

Zrobiłem wersję 8.3 i tak, wygląda na to, że wszystko tam jest.
Jason Swett

Czy możesz opublikować wynik z pg_config? To powinno nam ułatwić pomoc.
justis

Musiałem dodać wersję -v '0.14.0', aby działała z projektem mu
Matthieu Rouif

Odpowiedzi:


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

PRACOWANO!


2
Musiałem dodać wersję "env ARCHFLAGS =" - arch x86_64 "gem install -v '0.14.0'", aby działała z moim projektem
Matthieu Rouif

6
Pracował dla OS X Mavericks. Dla mnie toenv ARCHFLAGS="-arch x86_64" gem install pg -v '0.17.1' -- --with-pg-config=/opt/local/lib/postgresql91/bin/pg_config
Dawei Yang

17
A jeśli używasz "Postgres.app", pod mavericks, powinieneś zrobić: env ARCHFLAGS = "- arch x86_64 gem install pg - --with-pg-config = / Applications / Postgres.app / Contents / Versions / 9.3 / bin / pg_config (Załóżmy, że używasz Postgres.app w wersji 9.3, ponieważ lokalizacja pg_config może się zmienić, jeśli używasz innej wersji, ale i tak możesz ją znaleźć)
Zhaonan

2
To zadziałało dla mnie i przerwało 2-godzinną przerwę. Jestem nowy w railach i to było frustrujące. Podobnie jak poprzedni komentator, korzystałem z instalatora Postgres.app na Mavericks. Nie zdawałem sobie sprawy, że zmienna env ARCHFLGS jest tak ważna. Wyjaśnienie tutaj.
GNat

3
Pytanie brzmi, dlaczego to działa? Co robi "ARCHFLAGS =" - arch x86_64 "i dlaczego instalacja klejnotu waniliowego nie działa? Instalacja klejnotu nie powinna być taka trudna.
Jared Menard

78

Wypróbowałem najlepiej ocenianą odpowiedź tutaj:

env ARCHFLAGS="-arch x86_64" gem install pg

Ale kiedy ponownie spróbowałem uruchomić instalację pakietu, wystąpił ten sam błąd. Następnie wypróbowałem całą instalację pakietu z ARCHFLAGS w następujący sposób:

ARCHFLAGS="-arch x86_64" bundle install

Pracował dla mnie! Upewnij się, że wymieniasz x86_64 na i386 w zależności od posiadanej architektury.


2
Dziękuję bardzo. To właśnie zadziałało dla mnie. Od ponad godziny próbuję rozwiązać ten problem, a ten kod jest tym, co zrobił - ARCHFLAGS = "- arch x86_64" instalacja pakietu
pirateton Kwietnia

Dodatek @piratetone tutaj pracował dla mnie w High Sierra
tnaught

Doceniony za @Christine, zadziałał dla mnie na High Sierra
Ymow Wu

31

Miałem ten problem podczas korzystania z EnterpiseDB .dmg. Jeśli to ta sama myśl, której użyłeś, udało mi się ją uruchomić, określając odpowiednią architekturę:

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

W sieci jest kilka samouczków, które mówią o określaniu innej architektury (np. „-Arch x86_64” dla ludzi, którzy używali MacPorts), ale nie działało to dla mnie, ponieważ użyłem instalacji pojedynczego pliku.


6
x86_64 działał dla mnie (Mac OS 10.6.8, PostgreSQL zainstalowany przez homebrew: mxcl.github.com/homebrew )
chesterbr

2
Poświęciłem godziny na znalezienie rozwiązania, a twoje zadziałało, bobfet1 i @chester. Dzięki! :-))) ** sudo env ARCHFLAGS = "- arch x86_64" gem install pg **
rassom

24

Jeśli korzystasz z Yosemite:

brew install postgres

Następnie:

ARCHFLAGS="-arch x86_64" gem install pg

I (opcjonalnie) na koniec, jeśli chcesz uruchomić autoodkurzanie ...

postgres -D /usr/local/var/postgres

21

Może możesz spróbować tego:

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

Aby poznać architekturę swojej biblioteki, której możesz użyć

file /usr/local/lib/libpq.dylib 

co dało tylko 1 architekturę w moim przypadku (zainstalowana przez homebrew):

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

+1 Dziękuję za podpowiedź o tym, jaką architekturą była moja biblioteka!
Spike

Sprawdź także architekturę swojego pliku binarnego Ruby.
Leopd

18

Rozwiązanie: przeinstalowano PostgreSQL z Homebrew.


1
Gratulacje! Pamiętaj, aby przyznać komuś nagrodę. Kilku ludzi bardzo starało się pomóc, nawet jeśli nie było to ostateczne rozwiązanie, a punkty reputacji zostały już wydane, gdy zaoferowałeś nagrodę.
justis

2
Nie jestem pewien, dlaczego to ma -1, zadziałało dla mnie, gdy żadna z innych metod nie zadziałała
Abe Petrillo

Skończyło się również na tym, że musiałem użyć metody ARCHFLAGS, ale nie zadziałała, dopóki nie zainstalowałem ponownie postresql z homebrew.
Dave Cowart

Pracował dla Yosemite (10.10.3). brew zainstaluj PostgreSQL
roosevelt

To nie zadziałało dla mnie. Ciekawe, czy ma to coś wspólnego z faktem, że używam „wbudowanego” Rubiego (tak mi się wydaje) zamiast czegokolwiek innego: |
rogerdpack

6

Fałsz, gempoprzedzając odpowiednie zmienne środowiskowe. Jeśli instalowałeś z MacPorts, powinieneś być w stanie przejść przez następującą procedurę:

% /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

Stamtąd wyciągnąć LIBDIR, INCLUDEDIR, CPPFLAGS, LIBSoraz LDFLAGS(ten, który moim zdaniem będzie Ci uruchomiony jest LIBDIRjednak). Wtedy uciekłbyś:

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

To powinno wystarczyć. Daj mi znać, jeśli nie.


Użyłem instalatora jednym kliknięciem zamiast MacPorts dla PostgreSQL. Nie wiem, jakie byłoby równoważne polecenie.
Jason Swett

Sprawdź, czy ci się poszczęści (myślę, że skrypt updatedb Maca działa w sobotę wieczorem):locate pg_config
Sean

Nadal nie wiem, co to by oznaczało dla CPPFLAGSlub LDFLAGS(nie wiem, co to jest, przepraszam).
Jason Swett

Och, ale locate pg_configpokazał mi trochę rzeczy. Próbowałem po prostu zainstalować PostgreSQL przez MacPorts i używając twojego polecenia - nie zadziałało.
Jason Swett

1
Zaktualizowano powyższy przykład. Wierzę, że to rozwiąże Twój problem. Problem polegał na tym, że LDFLAGSnie ustawiono katalogu, który zawierał libpq. Szczegółowe informacje znajdują się powyżej.
Sean

5

Problem, który mieliśmy, był dość dziwny.

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

ale kiedy w rzeczywistości wykonaliśmy instalację pakietową, pakiet nie był zainstalowany dla wersji Ruby, która była instalowana przez rbenv, więc kiedy wpisaliśmy instalację pakietową, używał bundlera systemu.

Dlatego przed uruchomieniem instalacji pakietu upewnij się, że zainstalowałeś pakiet, uruchamiając

gem install bundler

To zadziałało w moim przypadku (świeży macOS High Sierra, używając rbenv i instalując głównie z brew). Pakiet prawdopodobnie używał rzeczy z Apple, to był problem ...
saza

3

Myślę, że nie potrzebujesz plików rozwojowych postgres, wszystko, czego potrzebujesz, powinno być dołączone do twojego instalatora. Bardziej prawdopodobne jest, że ścieżka, na której są instalowane, nie znajduje się w ścieżce twojego środowiska i dlatego gem nie może ich znaleźć, gdy próbuje skompilować pg.

Nie powinieneś uruchamiać się gem install pgjako root, w rzeczywistości, jeśli to zrobisz, prawdopodobnie twoja PATH (PATH roota, jeśli jest uruchomiona w / sudo) nie będzie zawierała niezbędnych informacji.

Zwykle działa dla mnie:

# 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

Uruchomienie gem install pg(wraz z dwoma poprzednimi poleceniami) zamiast sudo gem install pgnadal daje dokładnie te same wyniki.
Jason Swett

Czy korzystasz z architektury 32- czy 64-bitowej? Czy wypróbowałeś powyższe z inną flagą architektury? Czy zmieniłeś /Library/PostgreSQL/...również poprawną lokalizację, gdziekolwiek jest twoja kopia instalacji postgres?
Brett Bender

Zajrzałem do moich notatek na temat wykonywania poleceń, które wymieniłem. Wygląda na to, że zainstalowałem Postgres przez sudo port install postgresql83 postgresql83-server, podobnie do tych instrukcji: flux88.com/2010/06/installing-postgresql-for-rails-on-mac-os-x . Wygląda na to, że samodzielny instalator jest 32-bitowy, więc chcesz ustawić flagi arch na 32-bitowe, nawet jeśli twoja maszyna jest 64-bitowa. Jeśli nie możesz go uruchomić, sugeruję odinstalowanie i ponowną instalację za pośrednictwem MacPorts, a następnie wykonanie powyższych instrukcji. Mam nadzieję, że to pomoże!
Brett Bender

3

Oto, co ostatecznie zrobiłem dla mnie (połączenie wielu rozwiązań dostarczonych wcześniej wraz z innymi postami):

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


Powyższe rozwiązanie działało dla mnie w 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 Znajdź dokładną ścieżkę do folderu dołączanego i odpowiednio ją zaktualizuj.
maniempire

1

ARCHFLAGSOdpowiedź, że inni zaproponowali nie będzie działać, jeśli jakoś skończyło się w wersji 64-bitowej wersji PostgreSQL (który będzie zainstalować homebrew) oraz w wersji 32-bitowej rubinu. Z jakiegoś powodu rbenvnalega na zbudowanie dla mnie ruby ​​1.9.2-p290 jako 32-bitowego, co uniemożliwia linkowanie z 64-bitowymi postgresami.

Sprawdź architekturę swojego pliku binarnego Ruby za pomocą

file `which ruby`

lub jeśli używasz rbenv

file `rbenv which ruby`

I porównaj z postgresami:

file `which postgres`

Jeśli nie ma dopasowania, musisz ponownie zainstalować postgres lub ruby. Dzięki rbenv rozwiązałem to, po prostu przełączając się na inną wersję: 1.9.3-p194zamiast 1.9.2-p290.


1

W ten sposób udało mi się pracować na Mavericks. Uwaga: już zainstalowałem postgresql 9.3 z homebrew.

  1. Zaktualizuj Xcode do 5.0 z App Store

  2. Zainstaluj narzędzia programistyczne wiersza poleceń

    xcode-select --install

  3. Zgadzam się na licencję Xcode

    sudo xcodebuild -license

  4. Zainstaluj klejnot

    ARCHFLAGS = "- arch x86_64" gem install pg



0

Prawdopodobnie trochę się spóźniłem na imprezę tutaj, ale w moim przypadku używałem rbenv i aktualizowałem do Ruby 2.2.3. Musiałem zainstalować Bundler, aby mój działał, miałem starą wersję systemu.

gem install bundler


0

Jak wspomniano powyżej, ma to związek z faktem posiadania dwóch łuków rubinowych na 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]co musiałem zrobić, to po prostu zainstalować pgklejnot wymuszający x86_64arch do użycia z tym poleceniem:

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

Pamiętaj, aby mieć bash_profileaktualne informacje

Dodaj ścieżkę do swoich postgresów, w tym przypadku używam aplikacji Postgres ( OSX) zamiast brew( https://postgresapp.com/ ) domyślnie jest to lokalizacja:

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

Załaduj ponownie bash za pomocą

sudo vi ~/.bash_profile

Po wykonaniu tej czynności udało mi się w końcu pomyślnie zainstalować pg gem

Mam nadzieję że to pomoże!


0

Na Macu możesz spróbować tego (działa dla mnie): gem install pg - with-pg-include = / Library / PostgreSQL / 9.5 / include Fetching: pg-1.0.0.gem (100%) Budowanie natywnych rozszerzeń z: ' with-pg-include = / Library / PostgreSQL / 9.5 / include 'Może to chwilę potrwać ... Pomyślnie zainstalowano pg-1.0.0 Analizowanie dokumentacji dla pg-1.0.0 Instalowanie dokumentacji ri dla pg-1.0.0 Zakończono instalację dokumentacji za pg po 3 sekundach zainstalowano 1 klejnot

(w tej części „/Library/PostgreSQL/9.5/include” musisz podać swoją ścieżkę do Postgres)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.