ไม่พบไลบรารีไคลเอนต์ 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

คุณติดตั้ง postgresql รุ่น 8.3 หรือติดตั้งการติดตั้งแบบเก่าหรือไม่? หากเป็นไลบรารี 8.3 ควรอยู่ใน /Library/PostgreSQL/8.3/lib โปรดตรวจสอบว่ามีหรือไม่
Eelke

ฉันทำเวอร์ชั่น 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 =" - 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
และถ้าคุณใช้ "Postgres.app" ภายใต้ mavericks คุณควรทำ: env ARCHFLAGS = "- arch x86_64 gem ติดตั้ง pg - - ด้วย -pg-config = / Applications / Postgres.app / เนื้อหา / รุ่น / 9.3 / bin / pg_config (สมมติว่าคุณใช้ Postgres.app เวอร์ชั่น 9.3 เนื่องจากตำแหน่งของ pg_config อาจเปลี่ยนไปหากคุณใช้เวอร์ชั่นอื่น แต่คุณสามารถหามันได้)
Zhaonan

2
สิ่งนี้ใช้ได้สำหรับฉันและหยุด 2 ชั่วโมง ฉันใหม่กับรางและสิ่งนี้ก็น่าผิดหวัง เช่นเดียวกับผู้แสดงความคิดเห็นก่อนหน้านี้ฉันใช้ตัวติดตั้ง Postgres.app บน Mavericks ไม่ทราบว่าตัวแปร env ARCHFLGS มีความสำคัญมาก คำอธิบายที่นี่
GNat

3
คำถามคือทำไมจึงใช้งานได้? "ARCHFLAGS =" - arch x86_64 "ทำอะไรและทำไมการติดตั้ง gem วานิลลาถึงไม่ทำงานมันไม่น่าจะเป็นการยากที่จะติดตั้งอัญมณี
Jared Menard

78

ฉันลองคำตอบที่ติดอันดับยอดนิยมที่นี่:

env ARCHFLAGS="-arch x86_64" gem install pg

แต่เมื่อฉันลองใช้การติดตั้งมัดอีกครั้งมันมีข้อผิดพลาดเดียวกัน จากนั้นฉันลองติดตั้ง Bundle ทั้งหมดด้วย ARCHFLAGS ดังนี้:

ARCHFLAGS="-arch x86_64" bundle install

ทำงานให้ฉัน! ตรวจสอบให้แน่ใจว่าได้แทนที่ x86_64 ด้วย i386 ขึ้นอยู่กับสถาปัตยกรรมที่คุณมี


2
ขอบคุณมาก. นี่คือสิ่งที่ได้ผลสำหรับฉัน ฉันพยายามแก้ไขปัญหานี้เป็นเวลาหนึ่งชั่วโมงและตอนนี้และรหัสนี้คือสิ่งที่มันทำ - ARCHFLAGS = "- arch x86_64" การติดตั้งมัด
piratetone

การเติม @piratetone ของที่นี่ทำงานให้ฉันใน High Sierra
ต้องใช้

ขอบคุณสำหรับ @Christine มันใช้ได้กับฉันใน High Sierra
Ymow Wu

31

ฉันเพิ่งพบปัญหานี้เมื่อใช้ EnterpiseDB .dmg ถ้านั่นคือสิ่งที่คุณคิดว่าฉันใช้ฉันก็สามารถใช้งานได้โดยระบุสถาปัตยกรรมที่เหมาะสม:

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

มีแบบฝึกหัดบางอย่างบนเว็บที่กล่าวถึงการระบุสถาปัตยกรรมที่แตกต่างกัน (เช่น "-arch x86_64" สำหรับผู้ที่ใช้ MacPort) แต่มันไม่ทำงานสำหรับฉันเพราะฉันใช้การติดตั้งไฟล์เดียว


6
x86_64 ใช้งานได้สำหรับฉัน (Mac OS 10.6.8, PostgreSQL ติดตั้งผ่าน homebrew: mxcl.github.com/homebrew )
chesterbr

2
ใช้เวลาหลายชั่วโมงเพื่อหาทางแก้ปัญหาและงานของคุณได้ผล bobfet1 & @chester ขอบคุณ! :-))) ** sudo env ARCHFLAGS = "- arch x86_64" gem install 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

วิธีแก้ไข: ติดตั้ง PostgreSQL ใหม่ด้วย Homebrew


1
ยินดีด้วย! อย่าลืมมอบรางวัลให้กับใครบางคน มีคนไม่กี่คนที่พยายามอย่างหนักเพื่อช่วยแม้ว่ามันจะไม่ใช่ทางออกสุดท้ายและคะแนนชื่อเสียงก็ถูกใช้ไปแล้วเมื่อคุณเสนอเงินรางวัล
justis

2
ไม่แน่ใจว่าทำไมถึงมี -1 ทำงานสำหรับฉันเมื่อไม่มีวิธีการอื่น ๆ ได้
Abe Petrillo

ฉันก็ต้องใช้วิธี ARCHFLAGS ด้วยเช่นกัน แต่มันก็ไม่ทำงานจนกว่าจะติดตั้ง postresql ด้วย homebrew
Dave Cowart

ทำงานให้กับโยเซมิตี (10.10.3) ชงติดตั้ง PostgreSQL
roosevelt

สิ่งนี้ไม่ได้ผลสำหรับฉัน สงสัยว่ามันมีบางอย่างเกี่ยวข้องกับความจริงที่ว่าฉันใช้ "built-in" Ruby (ฉันคิดว่า) แทนสิ่งอื่น
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
Sean

ฉันยังไม่รู้ว่าจะหมายถึงอะไรCPPFLAGSหรือLDFLAGS(ฉันไม่รู้ว่ามันคืออะไรขอโทษ)
Jason Swett

อ้อ แต่locate pg_configได้แสดงบางสิ่งให้ฉัน และฉันลองติดตั้ง PostgreSQL ผ่าน MacPorts และใช้คำสั่งของคุณ - ไม่ทำงาน
Jason Swett

1
อัปเดตตัวอย่างข้างต้น ฉันเชื่อว่านี่จะช่วยแก้ปัญหาของคุณ จับคือการที่ไม่ได้ตั้งค่าไดเรกทอรีที่มีอยู่LDFLAGS libpqดูรายละเอียดด้านบน
Sean

5

ปัญหาที่เราเจอนั้นค่อนข้างแปลก

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

แต่เมื่อเราทำการติดตั้งบันเดิลจริง ๆ แล้ว Bundler ไม่ได้ถูกติดตั้งสำหรับรุ่นของ ruby ​​ที่ติดตั้งโดย rbenv ดังนั้นเมื่อเราพิมพ์บันเดิลการติดตั้งมันใช้ bundler ของระบบ

ดังนั้นก่อนรันบันเดิลการติดตั้งต้องแน่ใจว่าคุณได้ติดตั้งบันเดิลด้วยการรัน

gem install bundler

สิ่งนี้ใช้งานได้ในกรณีของฉัน (macOS สดสูงเซียร์ราใช้ rbenv และติดตั้งส่วนใหญ่กับชง) Bundle มีแนวโน้มว่าจะใช้สิ่งที่มาจากแอปเปิ้ลที่เป็นปัญหา ...
Saza

3

ฉันไม่คิดว่าคุณต้องการไฟล์พัฒนา postgres ทุกสิ่งที่คุณต้องการควรรวมอยู่ในโปรแกรมติดตั้งของคุณ มีโอกาสมากขึ้นที่พา ธ ที่ติดตั้งไม่ได้อยู่ในพา ธ ของสภาพแวดล้อมของคุณดังนั้นจึงไม่สามารถหาอัญมณีได้เมื่อพยายามรวบรวม pg

คุณไม่จำเป็นต้องเรียกใช้gem install pgในฐานะรูทอันที่จริงหากคุณเป็นไปได้ว่า PATH ของคุณ (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

เรียกใช้gem install pg(พร้อมกับคำสั่งก่อนหน้าทั้งสองของคุณ) แทนที่จะsudo gem install pgยังให้ผลลัพธ์ที่แน่นอนเหมือนกัน
Jason Swett

คุณใช้สถาปัตยกรรม 32- บิตหรือ 64- บิต? คุณได้ลองด้านบนด้วยการตั้งค่าสถานะสถาปัตยกรรมอื่น ๆ คุณได้เปลี่ยน/Library/PostgreSQL/...ไปยังตำแหน่งที่ถูกต้องทุกที่ที่สำเนาการติดตั้ง postgres ของคุณอยู่ด้วยหรือไม่
Brett Bender

ดูบันทึกของฉันเกี่ยวกับการทำคำสั่งที่ฉันระบุไว้ ดูเหมือนว่าผมติดตั้ง Postgres ผ่านsudo port install postgresql83 postgresql83-serverคล้ายกับคำแนะนำเหล่านี้flux88.com/2010/06/installing-postgresql-for-rails-on-mac-os-x ดูเหมือนว่าตัวติดตั้งแบบสแตนด์อโลนนั้นเป็นแบบ 32 บิตดังนั้นคุณจึงต้องการตั้งค่าสถานะส่วนโค้งเป็น 32 บิตแม้ว่าเครื่องของคุณจะเป็นแบบ 64 บิตก็ตาม หากคุณไม่สามารถใช้งานได้ฉันขอแนะนำให้ถอนการติดตั้งและติดตั้งใหม่ผ่าน MacPorts จากนั้นลองทำตามคำแนะนำด้านบน หวังว่าจะช่วย!
Brett Bender

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 ติดตั้ง pg -v '1.1.2' - ด้วย -pg-include = / usr / local / cellar / postgresql / 10.5 / รวม ค้นหาพา ธ ที่แน่นอนสำหรับโฟลเดอร์ include และอัปเดตตามนั้น
maniempire

1

ARCHFLAGSคำตอบว่าคนอื่น ๆ ได้เสนอจะไม่ทำงานถ้าคุณจบลงอย่างใดขึ้นกับรุ่น 64 บิตของ postgres (ซึ่ง homebrew จะติดตั้ง) และรุ่น 32 บิตของทับทิม ด้วยเหตุผลบางอย่างrbenvยืนยันในการสร้างทับทิม 1.9.2-p290 เป็น 32 บิตสำหรับฉันซึ่งทำให้เป็นไปไม่ได้ที่จะเชื่อมโยงกับ postgres 64- บิต

ตรวจสอบสถาปัตยกรรมของไบนารีทับทิมของคุณด้วย

file `which ruby`

หรือถ้าใช้ rbenv

file `rbenv which ruby`

และเปรียบเทียบกับ postgres ของคุณ:

file `which postgres`

หากมีข้อผิดพลาดคุณจะต้องติดตั้ง postgres หรือ ruby ​​อีกครั้ง ด้วย rbenv ฉันจะแก้ไขเพียงแค่นี้โดยการเปลี่ยนเป็นรุ่นที่แตกต่างกันแทน1.9.3-p1941.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 = "- arch x86_64" gem ติดตั้ง pg



0

ฉันอาจจะสายไปงานเลี้ยงที่นี่ แต่ในกรณีของฉันฉันใช้ rbenv และอัปเกรดเป็น Ruby 2.2.3 ฉันต้องติดตั้ง Bundler เพื่อให้ทำงานได้ฉันมีระบบรุ่นเก่า

gem install bundler


0

ดังที่ได้กล่าวมาแล้วเกี่ยวกับความจริงของการมีสอง ruby ​​archs บน 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]สิ่งที่ฉันต้องทำคือเพียงติดตั้งpggem บังคับให้x86_64arch ใช้กับคำสั่งนี้:

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

จำไว้ว่าให้คุณbash_profileทันสมัย

เพิ่มเส้นทางของ postgres ของคุณในกรณีนี้ฉันใช้แอป 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 / รวมการดึงข้อมูล: pg-1.0.0.gem (100%) การสร้างส่วนขยายเนทีฟด้วย: ' with-pg-include = / Library / PostgreSQL / 9.5 / รวม 'อาจใช้เวลาสักครู่ ... ติดตั้งสำเร็จ pg-1.0.0 การแยกเอกสารประกอบสำหรับ pg-1.0.0 การติดตั้งเอกสาร ri สำหรับ pg-1.0.0 สำหรับ pg หลังจาก 3 วินาที 1 อัญมณีติดตั้ง

(ส่วนนี้ "/Library/PostgreSQL/9.5/include" คุณต้องใส่เส้นทาง Postgres ของคุณ)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.