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

나는 아직도에 대한 의미가 무엇인지 모르는 CPPFLAGS나 LDFLAGS(미안, 사람들이 무엇인지 모른다).
— 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.