我使用的是Ruby on Rails 3.1预版本。我喜欢使用PostgreSQL,但问题是安装pg gem。它给了我以下错误:
$ 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
我怎么解决这个问题?
看起来在Ubuntu中,头文件是libpq-dev包的一部分(至少在以下Ubuntu版本中是这样的:
11.04 (Natty Narwhal), 10.04 (Lucid Lynx), 11.10 (Oneiric Ocelot), 12.04 (Precise穿山甲),14.04 (Trusty Tahr)和18.04(仿生海狸)):
...
/usr/include/postgresql/libpq-fe.h
...
所以试着为你的操作系统安装libpq-dev或类似的软件:
Ubuntu/Debian系统:sudo apt-get install libpq-dev
RHEL系统:yum install postgresql-devel
对于Mac Homebrew: brew安装postgresql
对于Mac MacPorts PostgreSQL: gem install pg -- --with-pg-config=/opt/local/lib/ PostgreSQL[版本号]/bin/pg_config . exe
OpenSuse:在postgresql-devel中使用zypper
对于ArchLinux: pacman -S postgresql-libs
我可以用另一种方法解决这个问题。我在系统里找不到图书馆。因此,我使用PostgreSQL主网站上的应用程序安装了它。在我的情况下(OS X),我发现文件在/Library/PostgreSQL/9.1/include/安装结束后。如果你已经安装了PostgreSQL,你也可以在其他地方安装这个文件,这取决于你的系统。
多亏了这个关于如何为gem安装添加额外路径的链接,我可以用下面的命令将gem指向lib:
export CONFIGURE_ARGS="with-pg-include=/Library/PostgreSQL/9.1/include/"
gem install pg
在那之后,它就工作了,因为它现在知道在哪里找到丢失的库。只需将路径替换为libpq-fe.h的正确位置
在CentOS 6.5(挤压)下,我创建了一个文件:
$ sudo touch /etc/profile.d/psql.sh
与内容:
pathmunge /usr/pgsql-9.3/bin
注意这里,你应该用pg_config文件设置你的PostgreSQL路径。你可以通过以下命令找到:
$ sudo find / -iname pg_config
保存文件:
$ sudo chmod +x /etc/profile.d/ruby.sh
然后再试着执行你的命令。
注意:任何时候你改变Bash配置-改变概要文件。d配置-您应该重新加载Bash。
libpq-fe.h的位置取决于PostgreSQL的安装位置(这取决于你如何安装它)。使用locate (http://en.wikipedia.org/wiki/Locate_%28Unix%29)在您的机器上查找libpq-fe.h文件。如果它存在,它将在PostgreSQL安装的include目录中。
$ locate libpq-fe.h
/Library/PostgreSQL/9.1/include/libpq-fe.h
包含pg_config的bin目录将位于与include目录相同的目录中。正如错误提示的那样,使用——with-pg-config选项来安装gem:
$ gem install pg --with-pg-config="/Library/PostgreSQL/9.1/bin/pg_config"
注意,如果你从未使用过locate,或者自从安装PostgreSQL后就没有更新过,你可能需要运行updatedb。
步骤1)确保在您的系统中安装了postgress(如果它已经安装并且您可以在您的机器上运行postgress服务器,则移动到步骤(2)
apt-get install postgresql postgresql-contrib (sol - fatal error: libpq-fe.h: No such file or directory)
sudo apt-get install ruby-dev (required to install postgress below)
sudo gem install pg
sudo service postgresql restart
步骤2)一些c++文件试图直接访问libpq-fe.h,但无法找到。所以我们需要手动搜索每一个这样的文件,并将libpq-fe.h替换为postgresql/libpq-fe.h
在所有目录和子目录中搜索libpq-fe.h的命令是grep -rnw ./ -e 'libpq-fe.h'
3)进入“All file listed by command run in step 2”,使用postgresql/libpq-fe.h手动修改libpq-fe.h。
在Ubuntu 20.04上,我已经有libpq5:amd64 version 13.2-1.pgdg20.04+1。现在,当我试图从apt存储库安装libpq-dev时,我正在接收
The following packages have unmet dependencies:
libpq-dev : Depends: libpq5 (= 12.6-0ubuntu0.20.04.1) but 13.2-1.pgdg20.04+1 is to be installed
我从http://ftp.us.debian.org/debian/pool/main/p/postgresql-13/libpq-dev_13.2-1_amd64.deb上获取了deb,并做了以下工作:
mkdir -p /tmp/libpq-dev
dpkg-deb -R libpq-dev_13.2-1_amd64.deb /tmp/libpq-dev
sed -i 's|= 13.2-1|= 13.2-1.pgdg20.04+1|' /tmp/libpq-dev/DEBIAN/control
dpkg-deb -b /tmp/libpq-dev /tmp/libpq-dev-new.deb
sudo dpkg -i /tmp/libpq-dev-new.deb
从那以后,我一直在愉快地使用宝石。没有额外的安装或任何东西。