PostgreSQL 클라이언트 라이브러리를 찾을 수 없습니다 (libpq)


146

Mac OS X 10.6에 PostgreSQL for Rails를 설치하려고합니다. 먼저 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

postgresql 버전 8.3을 설치 했습니까? 아니면 오래된 설치를 선택합니까? 8.3 라이브러리 인 경우 /Library/PostgreSQL/8.3/lib에 있어야합니다.
Eelke

나는 8.3 버전을 사용했는데 모든 것이있는 것처럼 보입니다.
Jason Swett

에서 출력을 게시 할 수 있습니까 pg_config? 그것은 우리가 더 쉽게 도울 수 있도록해야합니다.
just is

mu 프로젝트와 함께 작동하도록 버전 -v '0.14.0'을 추가해야했습니다
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 ="-arch 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
그리고 mavericks에서 "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 시간 파업을 일으켰습니다. 나는 레일을 처음 접했고 이것이 실망 스러웠다. 이전 주석 자와 마찬가지로 Mavericks에서 Postgres.app 설치 프로그램을 사용하고있었습니다. 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의 추가 사항은 High Sierra에서 나를 위해 일했습니다
tnaught

@Christine에 대한 감사, 그것은 높은 시에라에 나를 위해 일한 것
Ymow 우에게

31

EnterpiseDB .dmg를 사용할 때이 문제가 발생했습니다. 그것이 당신이 사용한 것과 같은 생각이라면, 올바른 아키텍처를 지정하여 작동하도록했습니다.

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

웹에 다른 아키텍처 (예 : MacPorts를 사용하는 사람들을위한 "-arch x86_64")를 지정하는 튜토리얼이 있지만 단일 파일 설치를 사용했기 때문에 작동하지 않았습니다.


6
: x86_64에 나를 위해 (맥 OS 10.6.8는, PostgreSQL의이 사제를 통해 설치했다 mxcl.github.com/homebrew )
chesterbr

2
해결책을 찾기 위해 몇 시간을 보냈고 bobfet1 & @chester가 효과가있었습니다. 감사! :-))) ** sudo env ARCHFLAGS = "-arch x86_64"gem 설치 pg **
rassom

24

요세미티를 사용하는 경우 :

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 내 라이브러리가 어떤 아키텍처인지 아는 것에 대한 힌트를 주셔서 감사합니다!
스파이크

또한 루비 바이너리의 아키텍처를 확인하십시오.
Leopd

18

해결 방법 : Homebrew와 함께 PostgreSQL을 다시 설치하십시오.


1
축하합니다! 현상금을 누군가에게 수여해야합니다. 몇몇 사람들은 최종 해결책이 아니더라도 도와 주려고 애썼으며, 현상금을 줄 때 명성 포인트가 이미 사용되었습니다.
just is

2
왜 이것이 -1인지, 확실하지 않은 다른 방법이
없었을

또한 ARCHFLAGS 방법을 사용해야했지만 homebrew로 postresql을 다시 설치하기 전까지는 작동하지 않았습니다.
Dave Cowart

요세미티 (10.10.3)에서 근무했습니다. BREW 설치 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

그렇게해야합니다. 그렇지 않은 경우 알려주십시오.


PostgreSQL 용 MacPorts 대신 원 클릭 설치 프로그램을 사용했습니다. 동등한 명령이 무엇인지 모르겠습니다.
Jason Swett 2016

운이 좋으면 (맥의 업데이트 된 스크립트가 토요일 밤에 실행된다고 생각한다) :locate pg_config
Sean

나는 아직도에 대한 의미가 무엇인지 모르는 CPPFLAGSLDFLAGS(미안, 사람들이 무엇인지 모른다).
Jason Swett 1

하지만 locate pg_config그래도 몇 가지를 보여주었습니다. MacPorts를 통해 PostgreSQL을 설치하려고 시도했지만 명령을 사용했지만 작동하지 않았습니다.
Jason Swett 1

1
위의 예를 업데이트했습니다. 나는 이것이 당신의 문제를 해결할 것이라고 믿습니다. 캐치는 LDFLAGS포함 된 디렉토리로 설정되지 않았습니다 libpq. 자세한 내용은 위를 참조하십시오.
Sean

5

우리가 가진 문제는 꽤 이상했습니다.

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

그러나 실제로 번들 설치를 할 때 rbenv가 설치 한 루비 버전에 번 들러가 설치되지 않았으므로 번들 설치를 입력 할 때 시스템 번 들러를 사용했습니다.

번들 설치를 실행하기 전에 다음을 실행하여 번 들러를 설치했는지 확인하십시오.

gem install bundler

이것은 내 경우 (rbenv를 사용하고 대부분 brew와 함께 설치하는 새로운 macOS High Sierra)에서 작동했습니다. 번들은 아마도 애플의 물건을 사용하고 있었을 것입니다. 그것은 문제였습니다.
saza

3

postgres 개발 파일이 필요하다고 생각하지 않습니다. 필요한 모든 것이 설치 프로그램에 포함되어 있어야합니다. 그들이 설치된 경로가 환경 경로에 없기 때문에 pg를 컴파일하려고 할 때 gem이 경로를 찾을 수 없습니다.

gem install pg루트 로 실행하지 않아도됩니다 . 사실 PATH (루트로 실행하는 경우 루트의 PATH)에 필요한 정보가 포함되어 있지 않을 수 있습니다.

다음은 일반적으로 저에게 효과적입니다.

# 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하면 여전히 동일한 결과가 나타납니다.
Jason Swett

32 비트 또는 64 비트 아키텍처를 사용하고 있습니까? 다른 아키텍처 플래그로 위를 시도 했습니까? 또한 /Library/PostgreSQL/...postgres 설치 사본이있는 곳의 정확한 위치로 변경 했 습니까?
Brett Bender

내가 나열한 명령을 수행하는 것에 대한 내 노트를 살펴 보았습니다. flux88.com/2010/06/installing-postgresql-for-rails-on-mac-os-xsudo port install postgresql83 postgresql83-server 와 비슷한 지침을 통해 Postgres를 설치 한 것 같습니다 . 독립형 설치 프로그램은 32 비트 인 것 같습니다. 따라서 컴퓨터가 64 비트 인 경우에도 아치 플래그를 32 비트로 설정하려고합니다. 작동하지 않으면 MacPorts를 통해 제거하고 다시 설치 한 다음 위의 지침을 시도하십시오. 희망이 도움이됩니다!
Brett Bender 2018 년

3

이것이 마침내 나를 위해 한 일입니다 (다른 게시물과 함께 제공된 여러 솔루션의 조합).

$ sudo env ARCHFLAGS = "-arch x86_64"gem 설치 pg-with-pg-include = / Library / 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 비트 버전 (사제가 설치되는)과 루비의 32 비트 버전하지 작업 결국 않을 경우 제안했다고 대답. 어떤 이유로 든 rbenv루비 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.


1

이것이 내가 매버릭스에서 일하도록 만든 방법입니다. 참고 : 이미 homebrew에서 postgresql 9.3을 설치했습니다.

  1. App Store에서 Xcode를 5.0으로 업데이트

  2. 명령 행 개발자 도구 설치

    xcode-select --install

  3. Xcode 라이센스에 동의

    sudo xcodebuild-라이센스

  4. 보석 설치

    ARCHFLAGS = "-arch x86_64"gem 설치 pg


1

그래서 기본적으로 나는 이것을했다 ;-)

brew install postgres

brew가 귀하의 답변에서 알 수 있듯이 libpq.so (dylib)를 설치합니까?
Paul-Sebastian Manole

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/ ) 대신 Postgres 앱 ( )을 사용 합니다.

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 인출 : pg-1.0.0.gem (100 %) with-pg-include = / Library / PostgreSQL / 9.5 / include '시간이 오래 걸릴 수 있습니다 ... pg-1.0.0 설치 성공 pg-1.0.0 구문 분석 설명서 pg-1.0.0 ri 설명서 설치 pg-1.0.0 문서 설치 완료 3 초 후 PG 용 1 gem 설치

(이 부분 "/Library/PostgreSQL/9.5/include"는 Postgres 경로를 입력해야합니다)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.