Không thể tìm thấy tiêu đề 'libpq-fe.h khi cố gắng cài đặt pg gem


790

Tôi đang sử dụng phiên bản trước của Ruby on Rails 3.1. Tôi thích sử dụng PostgreSQL, nhưng vấn đề là cài đặt pggem. Nó cho tôi lỗi sau:

$ gem install pg
Building native extensions.  This could take a while...
ERROR:  Error installing pg:
    ERROR: Failed to build gem native extension.

        /home/u/.rvm/rubies/ruby-1.9.2-p0/bin/ruby extconf.rb
checking for pg_config... no
No pg_config... trying anyway. If building fails, please try again with
 --with-pg-config=/path/to/pg_config
checking for libpq-fe.h... no
Can't find the 'libpq-fe.h header
*** 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=/home/u/.rvm/rubies/ruby-1.9.2-p0/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


Gem files will remain installed in /home/u/.rvm/gems/ruby-1.9.2-p0/gems/pg-0.11.0 for inspection.
Results logged to /home/u/.rvm/gems/ruby-1.9.2-p0/gems/pg-0.11.0/ext/gem_make.out

Làm thế nào để tôi giải quyết vấn đề này?


bạn có thể chứng minh rằng bạn đã cài đặt pg?
thenengah

Câu trả lời:


1247

Dường như trong Ubuntu, tiêu đề là một phần của libpq-devgói (ít nhất là trong các phiên bản Ubuntu sau: 11.04 (Natty Narwhal), 10.04 (Lucid Lynx), 11.10 (Oneiric Ocelot), 12.04 (Precise Pangolin), 14.04 (Trusty Tahr) và 18.04 (Hải ly Bionic)):

...
/usr/include/postgresql/libpq-fe.h
...

Vì vậy, hãy thử cài đặt libpq-devhoặc tương đương với hệ điều hành của bạn:

  • Đối với hệ thống Ubuntu / Debian: sudo apt-get install libpq-dev
  • Trên các hệ thống Red Hat Linux (RHEL):yum install postgresql-devel
  • Dành cho Mac Homebrew :brew install postgresql
  • Đối với Mac MacPorts PostgreSQL:gem install pg -- --with-pg-config=/opt/local/lib/postgresql[version number]/bin/pg_config
  • Đối với OpenSuse :zypper in postgresql-devel
  • Đối với ArchLinux :pacman -S postgresql-libs

1
đã không làm việc cho tôi trên Ubuntu 11.04durrantm@castleLinux2011:~/Dropbox_not_syncd/webs/3/linker$ gem install libpq-dev ERROR: Could not find a valid gem 'libpq-dev' (>= 0) in any repository durrantm@castleLinux2011:~/Dropbox_not_syncd/webs/3/linker$
Michael Durrant

1
Nếu sau đó bạn được yêu cầu cài đặt thư viện javascript ... gem install 'execjs' và gem install 'Therubyracer'
Nick Woodhams

@TravisR: Cảm ơn bạn đã cập nhật, tôi chỉ biến trang này thành wiki cộng đồng để giúp mọi người dễ dàng cập nhật hơn.
mu quá ngắn ngày

Tôi đang sử dụng Ubuntu 12.10, tôi không thể cài đặt pg gem sau khi cài đặt libpq-dev
vedarthk

2
Vui lòng sửa lại câu trả lời của bạn để bao gồm apt-get install postgres-server-dev-{pg.version} Câu trả lời của bạn không còn hoạt động với postgresql 9.4 trên Ubuntu 14.04 Xem: stackoverflow.com/a/28837453/75194
Ryan Rauh

169

Trên macOS (trước đây là Mac OS XOS X ), hãy sử dụng Homebrew để cài đặt các tiêu đề phù hợp:

brew install postgresql

và sau đó chạy

gem install pg

nên làm việc.

Ngoài ra, thay vì cài đặt toàn bộ postgresql, bạn có thể brew install libpqvà xuất chính xác PATHPKG_CONFIG_PATHnhư được giải thích trong phần 'Caveats'


5
Điều này có gây ra vấn đề gì không nếu bạn cũng đang sử dụng Postgres.app?
iconoclast

3
Đối với tôi sau khi chạy brew install postgressqltôi chạy ARCHFLAGS="-arch x86_64" gem install pgvà hoạt động tốt.
tổng thể

5
Ngoài ra, chỉ cần chạy brew install libpqxxtrên mac OSX là đủ
Ricardo Saporta

4
@RicardoSaporta libpqxxcài đặt postgresqldưới dạng phụ thuộc, vì vậy về cơ bản nó giống nhưbrew install postgresql
Troggy

3
Thay vì cài đặt toàn bộ postgresql, bạn có thể brew install libpqvà xuất chính xác PATHPKG_CONFIG_PATHnhư được giải thích trong phần 'Caveats'.
goetzc

118

Tôi cũng đã thử làm gem install libpq-dev, nhưng tôi đã nhận được lỗi này:

Can't find the 'libpq-fe.h header
*** extconf.rb failed ***

Tuy nhiên tôi thấy rằng việc cài đặt với sudo apt-get(mà tôi cố gắng tránh sử dụng với Ruby on Rails) đã hoạt động, tức là

sudo apt-get install libpq-dev
# or
apt-get install postgres-server-dev-{pg.version}
# for postgresql 9.4 on Ubuntu 14.04

sau đó tôi đã có thể làm

gem install pg

không có vấn đề


3
Phải, Ruby pg đá quý kết thúc tốt đẹp các thư viện PostgreSQL C thường đi kèm với Ubuntu / Debian / ... libpq-devgói.
mu quá ngắn

46

Tôi có thể giải quyết điều này theo một cách khác. Tôi đã không tìm thấy thư viện trên hệ thống của mình. Vì vậy, tôi đã cài đặt nó bằng một ứng dụng từ trang web chính của PostgreSQL. Trong trường hợp của tôi (OS X), tôi đã tìm thấy tệp trong /Library/PostgreSQL/9.1/include/khi quá trình cài đặt kết thúc. Bạn cũng có thể có tệp ở một nơi khác tùy thuộc vào hệ thống của bạn nếu bạn đã cài đặt PostgreSQL.

Nhờ liên kết này về cách thêm đường dẫn bổ sung để cài đặt đá quý , tôi có thể trỏ viên ngọc vào lib bằng lệnh này:

export CONFIGURE_ARGS="with-pg-include=/Library/PostgreSQL/9.1/include/"
gem install pg

Sau đó, nó hoạt động, bởi vì bây giờ nó biết nơi để tìm thư viện bị mất. Chỉ cần thay thế đường dẫn bằng vị trí phù hợp cho libpq-fe.h của bạn


2
Giải pháp của David làm việc cho tôi. Tôi đã theo dõi libpq-fe.h đến '/Appluggest/Postgres.app/Contents/Versions/9.3/include' và sử dụng lệnh xuất với đường dẫn đã nói, tiếp theo là 'gem install pg' và gem được cài đặt thành công.
Ryan Spears

Cảm ơn vì điều này, đã làm việc cho tôi, sử dụng:export CONFIGURE_ARGS="with-pg-include=/usr/local/Cellar/postgresql/9.3.1/include/"
brookr

1
Sử dụng Postgresql 9.3 trên CentOS 6 tôi đã giải quyết điều này bằng cách liên kết các pg_*tập lệnh vào $ PATH như vậy : ln -s /usr/pgsql-9.3/bin/p* /usr/local/bin. Tôi đã cài đặt postgres 9.3 như vậy:yum install http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdg-redhat93-9.3-1.noarch.rpm && yum install postgresql93 postgresql93-contrib postgresql93-server postgresql93-devel
JoePasq

1
bạn cũng có thể viết dưới dạnggem install pg -- with-pg-include=/Library/PostgreSQL/9.1/include/
lfender6445

Tốt hơn nữa, sử dụng export CONFIGURE_ARGS="with-pg-config=/path/to/postgres/bin/pg_config". Việc pg_configthực thi sẽ được gọi để có được tất cả các tùy chọn trình biên dịch và trình liên kết cần thiết - bạn có thể tự chạy nó để xem chúng.
skozin

29

Không thể tìm thấy tiêu đề libpq-fe.h

tôi đã thành công trên CentOS 7.0.1406 khi chạy các lệnh sau:

~ % psql --version # => psql (PostgreSQL) 9.4.1
yum install libpqxx-devel
gem install pg -- --with-pg-config=/usr/pgsql-9.4/bin/pg_config

Ngoài ra , bạn có thể định cấu hình trình đóng gói để luôn cài đặt pgvới các tùy chọn này (hữu ích để chạy trình bó trong môi trường triển khai),

  • bundle config build.pg --with-pg-config=/usr/pgsql-9.4/bin/pg_config

1
Rất hữu ích, cảm ơn. Chỉ cần thêm một ghi chú liên quan đến cấu hình gói ... bạn phải chạy lệnh này trong khi đăng nhập với tư cách là người dùng sẽ chạy lệnh gói tiếp theo. Cấu hình gói được lưu trữ trong ~ / .bundle / config, do đó, nó sẽ không được tìm thấy nếu bạn chạy cấu hình bó trong khi đăng nhập với quyền root, nhưng trình điều khiển được chạy bởi (ví dụ với capistrano) người dùng 'triển khai'.
Les Nightingill

3
bundle config build.pg --with-pg-config = / usr / pssql-9.4 / bin / pg_config giải quyết tôi cho tôi trên Centos 7
liloargana

2
gói cấu hình build.pg --with-pg-config = / usr / pssql-10 / bin / pg_config nếu bạn đang sử dụng postgresql10
Mahesh Neelakanta


17

Chỉ để cho bản ghi âm thôi:

Ứng dụng Ruby on Rails 4 trong OS X với PostgresApp (trong trường hợp này là phiên bản 0.17.1 cần thiết - loại dự án cũ):

gem install pg -v '0.17.1' -- --with-pg-config=/Applications/Postgres.app/Contents/Versions/9.3/bin/pg_config

1
Hoạt động tuyệt vời nếu bạn đang sử dụng Postgres.app tuyệt vời . Đối với Postgres 10, tôi đã sử dụng đường dẫn/Applications/Postgres.app/Contents/Versions/10/bin/pg_config
Master of Ducks

13

Trên Mac OS X chạy như thế này:

gem install pg -- --with-pg-config=***/path/to/pg_config***

***/path/to/pg_config*** là đường dẫn đến pg_config


1
Nâng cao. Tôi đã cài đặt Postgresql thông qua trình cài đặt grapihcal của EnterpriseDB . Sau đó, tôi cần phải tìm ra con đường pg-config bằng sudo find / -name "pg_config", sau đó gem install pg -- --with-pg-config=/Library/PostgreSQL/9.4/bin/pg_configsử dụng đường dẫn Tôi vừa phát hiện ra.
Yi Zeng

12

Trong trường hợp của tôi, đó là gói postgresql-server-dev-8.4(tôi đang dùng Ubuntu 11.04 (Natty Narwhal), 64 bit).


10

Câu trả lời đúng cho người dùng Mac với Postgres.app là xây dựng dựa trên libpqgói được cung cấp cùng với gói đó. Ví dụ: với bản phát hành 9,4 (hiện tại khi viết bài này), tất cả những gì bạn cần là:

export CONFIGURE_ARGS="with-pg-include=/Applications/Postgres.app/Contents/Versions/9.4/include"
gem install pg

Điều này sẽ giữ cho pgviên ngọc của bạn đồng bộ với chính xác phiên bản PostgreSQL bạn đã cài đặt. Cài đặt một cái gì đó từ Homebrew là một sự lãng phí trong trường hợp này.


9

Tôi đã có vấn đề tương tự trên Amazon Linux. Tôi có thể tìm thấy tiêu đề libpq-fe.h, nhưng bằng cách nào đó nó không hoạt động.

Nó đến từ các phiên bản khác nhau của các gói được cài đặt thông qua những người dùng khác nhau trên máy. PostgreSQL 9.2 và PostgreQuery 9.3 đã được cài đặt. Vì vậy, hãy chắc chắn về phiên bản PostgreSQL của bạn trước khi bao gồm các thư viện.

Đối với tôi, dòng lệnh ma thuật là:

sudo yum install postgresql93 postgresql93-server postgresql93-libs postgresql93-contrib postgresql93-devel

Nguồn: Hướng dẫn gần như ngốc để cài đặt PostgreSQL 9.3, PostGIS 2.1 và pgRouting với Yum


Sau khi cài đặt thư viện ... hãy dọn dẹp: "tạo distclean", "làm sạch", "./cool" và bắt đầu biên dịch!
mzalazar

8

Một câu trả lời chung hơn cho bất kỳ bản phân phối dựa trên Debian nào (bao gồm Ubuntu) là như sau. Đầu tiên, cài đặt apt-filegói chạy bằng root:

apt-get install apt-file

Điều này cho phép bạn tìm kiếm các gói chứa một tập tin. Sau đó, cập nhật cơ sở dữ liệu của nó bằng cách sử dụng

apt-file update

(điều này có thể được chạy như người dùng bình thường). Sau đó, tìm kiếm tiêu đề bị thiếu bằng cách sử dụng:

apt-file search libpq-fe.h

Trên máy của tôi, điều này mang lại:

libpq-dev: /usr/include/postgresql/libpq-fe.h
postgres-xc-server-dev: /usr/include/postgres-xc/server/gtm/libpq-fe.h

Có bạn đi!


"Libpq-dev: /usr/include/postgresql/libpq-fe.h" có mặt trong khi "postgres-xc-server-dev: /usr/include/postgres-xc/server/gtm/libpq-fe.h" không hiện diện ? tôi đang thiếu gì
furiabhavesh

Nội dung tập tin có thể đã thay đổi. Điều này trông giống như có một bản sao riêng của libpq-fe.h trong gói postgres -.... Trong mọi trường hợp, libXXX-dev là thứ bạn đang tìm kiếm nếu bạn muốn biên dịch mọi thứ.
Vincent Fourmond

7

Đối với MacOS mà không cần cài đặt máy chủ PostgreSQL:

brew install libpq
gem install pg -- --with-pg-config="/usr/local/Cellar/libpq/9.6.6/bin/pg_config"

5

Trên máy Mac, tôi đã giải quyết nó bằng mã này:

gem install pg -v '0.18.4' -- --with-pg-config=/Applications/Postgres.app/Contents/Versions/9.4/bin/pg_config

4

Tôi đang chạy Postgres.app trên máy Mac và tôi đã phải

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

Đầu tiên. Sau đó

bundle install

đã làm cho tôi.


4

Tôi gặp vấn đề tương tự trên Mac OS, nhưng tôi đã cài đặt đá quý PostgreSQL dễ dàng bằng cách sử dụng các mục sau trong thiết bị đầu cuối:

ARCHFLAGS="-arch x86_64" gem install pg

(Tôi đã cài đặt PostgreSQL trước tiên brew install postgresql.)


4

Tôi đã tìm thấy câu trả lời này và đó là câu trả lời duy nhất phù hợp với tôi (Mac OS) - sau khi nghiên cứu khoảng hai ngày:

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

Xem câu hỏi về Stack Overflow Không thể tìm thấy thư viện máy khách PostgreSQL (libpq) .


4

Gần đây tôi đã nâng cấp lên Mac OS X v10.10 (Yosemite) và gặp khó khăn khi xây dựng pgđá quý.

Các lỗi được báo cáo là điển hình:

Using config values from /usr/local/bin/pg_config
checking for libpq-fe.h... *** extconf.rb failed ***

Giải pháp của tôi là gem uninstall pgvà sau đó bundle update pgthay thế đá quý mới nhất. Tôi đã chạy brew update; brew upgradesau khi cài đặt Yosemite để có được các phiên bản mới nhất của các gói tôi đã cài đặt trước đó.


4

Trên Ubuntu, cài đặt "libpq-dev" để thoát khỏi vấn đề này.

sudo apt-get install libpq-dev

Nếu vẫn chưa đủ, hãy thêm sudo apt-get install postgresqltrướclibpq-dev
Alex Poca

3

Trên CentOS, tôi đã cài đặt libpq-dev packagebằng lệnh bên dưới

yum install postgresql-devel

Thực thi gem install pgtrả lại lỗi tương tự như " No pg_config... trying anyway. If building fails, please try again with --with-pg-config=/path/to/pg_config".

Cài đặt đá quý như dưới đây đã giải quyết vấn đề của tôi

gem install pg -- --with-pg-config=/usr/pgsql-x.x/bin/pg_config

2

Trên FreeBSD (9.1) gói cần thiết là / usr / cổng / cơ sở dữ liệu / postgresql-server * mà khi cài đặt cũng sẽ cài đặt tệp tiêu đề bắt buộc khiến cài đặt gem của "pg" không thành công. Câu trả lời này ở đây đã giúp tôi tìm ra giải pháp nhưng sự khác biệt trong tên gói yêu cầu một chút tìm kiếm.

Hy vọng rằng điều này sẽ giúp ai đó tránh được một chút đau đầu khi tìm kiếm gói "-dev" trên hệ thống FreeBSD!


2

Trên Debian 7.0, 64-bit (Wheezy), chỉ cần chạy:

sudo apt-get install libpq-dev

Sau khi bạn cài đặt thành công libpq-dev, hãy chạy:

bundle install

2

Trong CentOS 6.5 (Bóp) Tôi đã tạo một tệp:

$ sudo touch /etc/profile.d/psql.sh

với nội dung:

pathmunge /usr/pgsql-9.3/bin

Lưu ý ở đây, bạn nên đặt đường dẫn PostgreSQL của mình với tệp pg_config. Bạn có thể tìm thấy điều này với lệnh:

$ sudo find / -iname pg_config

Lưu các tập tin:

$ sudo chmod +x /etc/profile.d/ruby.sh

và cố gắng thực hiện lệnh của bạn một lần nữa.

Lưu ý: Bất cứ khi nào bạn thay đổi cấu hình Bash - thay đổi cấu hình profile.d - bạn nên tải lại Bash.


Làm thế nào bạn cài đặt postgres? Tôi liên kết các pg_*tập lệnh vào đường dẫn như vậy : ln -s /usr/pgsql-9.3/bin/p* /usr/local/bin. Sau đó tôi không cần thêm bất kỳ tập lệnh hay biến môi trường nào.
JoePasq

2

Vị trí của libpq-fe.htùy thuộc vào nơi cài đặt PostgreSQL của bạn (phụ thuộc vào cách bạn cài đặt nó). Sử dụng locate( http://en.wikipedia.org/wiki/Locate_%28Unix%29 ) để tìm libpq-fe.htệp trên máy của bạn. Nếu nó tồn tại, nó sẽ nằm trong includethư mục cài đặt PostgreSQL của bạn.

$ locate libpq-fe.h
/Library/PostgreSQL/9.1/include/libpq-fe.h

Thư mục binchứa pg_config, sẽ nằm trong cùng thư mục với includethư mục. Như lỗi cho thấy, hãy sử dụng tùy chọn --with-pg-config để cài đặt gem:

$ gem install pg --with-pg-config="/Library/PostgreSQL/9.1/bin/pg_config"

Lưu ý rằng bạn có thể cần chạy updatedbnếu bạn chưa từng sử dụng locatehoặc nếu bạn chưa cập nhật kể từ khi cài đặt PostgreSQL.


Nếu không có lỗi --trước, --with-pg-config=...tôi gặp lỗi: ERROR: Trong khi thực thi gem ... (OptionParser :: UnlimitedOption) tùy chọn không hợp lệ: --with-pg-config = / usr / bin / pg_config)
Alexis Wilke

2

Cuối cùng tôi đã giải quyết vấn đề này, nhưng không sử dụng các phương pháp được mô tả trước đây.

Sử dụng brew install postgresql, tôi phát hiện ra rằng nó đã được cài đặt, nhưng không được liên kết.

  1. Tìm nơi PostgreSQL được cài đặt và xóa nó,

  2. Sau đó, brew install postgresqlmột lần nữa,

  3. brew link postgresql

  4. gem install pg


"liên kết brew --force postgresql" làm việc cho tôi nhưng befor mà tôi phải chạy 'export PATH = "/ usr/local/opt/postgresql@9.4/bin: $ PATH"' >> ~ / .bash_profile
Jagdish Narayandasani

2

Tôi chỉ có điều này trên OSX chạy brew và postgres@9.4.

Cách khắc phục của tôi là:

CONFIGURE_ARGS="with-pg-include=/usr/local/opt/postgresql@9.4/include/" bundle install

2

Tôi đã có vấn đề này với Postgresql 9.6. Tôi đã có thể sửa nó bằng cách làm:

brew upgrade postgresql@9.6
brew link postgresql@9.6 --force
gem install pg

2

Tôi đã gặp lỗi tương tự với postgres được cài đặt thông qua asdf. Các giải pháp pg-config không hoạt động với tôi. Thay vào đó, tôi phải xác định vị trí các postgres bao gồm thư mục chứa tệp và chạy lệnh với --with-pg-includecờ

gem install pg -- --with-pg-include=/<path>/.asdf/installs/postgres/<version>/include

1

Đối với AltLinuxgói postgresqlx.x-devel(trong trường hợp của tôi postgresql9.5-devel) phải được cài đặt:

apt-get install postgresql9.5-devel

Bạn cũng có thể cài đặt các phiên bản cụ thể với yum - yum cài đặt postgresqlxx-devel, ví dụ: yum cài đặt postgresql94-devel
dworrad 18/07/2016

1

Tôi đã giải quyết việc cài đặt gói 'postgresql-common' này. Gói này cung cấp pg_confignhị phân rất có thể là những gì bạn đang thiếu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.