【问题标题】:cannot install pg gem, checking for PQconnectdb() in -lpq... no无法安装 pg gem,检查 -lpq 中的 PQconnectdb() ... 否
【发布时间】:2012-09-21 14:22:21
【问题描述】:

我正在尝试在本地使用 PostgreSQL 在 Ruby on Rails 中进行开发,因此我正在尝试安装 pg gem。在 Ubuntu 12.04 上。在终端中,我输入:

gem install pg -v '0.12.2'

这会引发以下错误:

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

        /home/troyshu/.rvm/rubies/ruby-1.9.3-p194/bin/ruby extconf.rb
checking for pg_config... yes
Using config values from /usr/bin/pg_config
checking for libpq-fe.h... yes
checking for libpq/libpq-fs.h... yes
checking for pg_config_manual.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
    --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/troyshu/.rvm/rubies/ruby-1.9.3-p194/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 /home/troyshu/.rvm/gems/ruby-1.9.3-p194/gems/pg-0.14.1 for inspection.
Results logged to /home/troyshu/.rvm/gems/ruby-1.9.3-p194/gems/pg-0.14.1/ext/gem_make.out

有趣的是,在命令中添加 sudo 可以:

$ sudo gem install pg -v '0.12.2'
Building native extensions.  This could take a while...
Successfully installed pg-0.12.2
1 gem installed

顺便说一句,我必须运行“sudo apt-get install ruby​​1.9.1-dev”才能使上述命令正常工作。但我仍然无法进行任何开发,因为“捆绑安装”不起作用(并且一直告诉我运行 'gem install pg -v '0.12.2')

我有一种感觉“gem install pg”被绊倒了

checking for PQconnectdb() in -lpq... no
checking for PQconnectdb() in -llibpq... no
checking for PQconnectdb() in -lms/libpq... no

但是,作为 Ubuntu 和 RoR 的新手,我不知道为什么。也许我的搜索技巧也很糟糕,因为我无法找到解决我的特殊情况的方法。希望有一个修复?

谢谢!

【问题讨论】:

  • 您确定已安装libpq-dev 吗?我已经发布了一个解释如何执行此操作的答案。
  • 你安装了哪些版本的PostgreSQL和libpq-dev
  • 所以我只是设置了一个 Ubuntu 12.04 Vagrant 框并以非 root 用户身份运行以下命令:$ sudo apt-get update$ sudo apt-get install postgresql libpq-dev build-essentials git-core curl$ curl -L https://get.rvm.io | bash -s stable --ruby$ gem install pg -v 0.12.2`没有错误(另外,我安装了最新版本的pg gem,v0.14.1,没有错误;你可能想看看你是否可以使用最新版本,而不是它一定会解决你的问题)。
  • 您是否尝试过删除并重新安装 Postgres 和 libpq-dev$ sudo apt-get autoremove postgresql libpq-dev 如果您使用 apt 安装。当您使用它时,您应该考虑使用最新版本的 Postgres:$ sudo add-apt-repository ppa:pitti/postgresql$ sudo apt-get update$ sudo apt-get install postgresql libpq-dev注意:所有这些都假设你不是 root

标签: ruby-on-rails postgresql rails-postgresql pg


【解决方案1】:

相关:gem install pg can not bind to libpq。请检查您的 mkmf 日志并查找 libssl 错误。我有同样的问题。我已经安装了 libpq-dev 并仔细检查了 pg_config。 gem 似乎找到了 libpq-dev 头文件,但未能与 libpq 链接。事实证明,rvm 为 ssl 安装的软件包以某种方式干扰了通过 libssl-dev 安装的软件包。

【讨论】:

  • 你能填写一下吗?您是如何解决问题的 - 摆脱“干扰”包?
【解决方案2】:

根据您发布的错误消息,您似乎没有安装libpq-dev。尝试apt-get install libpq-dev(如果您不是root,请使用sudo),然后安装gem。

由于您使用的是 RVM,如果您必须使用 sudo 来安装 gem,那么您做错了。 sudo 安装 gem 以使用系统的 Ruby,而不是您使用 RVM 安装的 Ruby。

【讨论】:

  • 酷。我想我之前已经运行过命令。我得到libpq-dev is already the newest version. 我还得到一堆其他输出,不确定是否相关:The following packages were automatically installed and are no longer required: libsdl-ttf2.0-0 libboost-filesystem1.46.1 python-numpy python-pygame deluge-gtk libsdl-mixer1.2 libboost-system1.46.1 libboost-python1.46.1 python-libtorrent libportmidi0 deluge-common libmikmod2 libboost-thread1.46.1 libtorrent-rasterbar6 libsmpeg0 运行gem install pg -v '0.12.2' 后仍然出现相同的错误:(
  • 是的,已安装。没有区别。
【解决方案3】:

我找到了一个奇怪的解决方案,但它对我有用,而不是所有其他建议:

mv ~/.rvm/usr/lib ~/.rvm/usr/lib_rvm 

【讨论】:

    【解决方案4】:

    如果 sudo 有效,而标准用户无效,则表明它在某处找到了其他用户未找到的某些库和头文件集,或者实际上存在未正确处理的权限问题别的地方。如果您愿意,您可能可以使用 strace 找到问题的根源。

    但是,我认为更明智的解决方案是认识到您可能需要 root 访问权限才能安装很多类似的东西,所以如果是我的系统,我会接受它。

    【讨论】:

      【解决方案5】:

      我遇到了类似的问题,bundle install 失败:

      Installing pg 0.17.1 with native extensions
      
      Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
      

      ...

      An error occurred while installing pg (0.17.1), and Bundler cannot continue.
      Make sure that `gem install pg -v '0.17.1'` succeeds before bundling.
      

      但使用gem install pg -v '0.17.1'

      我可以成功安装 gem,但捆绑包仍然会失败。

      我通过更改 pg 捆绑配置来修复它:

      1. 检查 pg 配置:

        $ which pg_config 返回:

        /usr/local/bin/pg_config

      2. 检查pg的当前捆绑构建选项

      $ bundle config build.pg

      1. 如果不是which pg_config返回的值,

      $ bundle config build.pg --with-pg-config=/usr/local/bin/pg_config

      现在尝试bundle install!!!!

      【讨论】:

        【解决方案6】:

        对我来说,唯一有效的是通过 rvm 网站上的说明安装 rvmhttps://rvm.io。我能够让它在 Ubuntu 14.04 上运行。

        目前的完整命令列表:
        sudo gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB

        确保您位于可下载目录中,然后运行:
        \curl -sSL https://get.rvm.io | bash -s stable

        【讨论】:

          【解决方案7】:

          我遇到了同样的错误,但似乎没有任何效果。最终发现这是一个与水蟒有关的问题。如果您正在运行 anaconda,则 gcc 编译器默认为 anaconda 安装中的编译器。这与权限混淆。通过执行以下操作修复了我的错误:

          1. 创建一个新的 conda 环境:conda create --name postgresql
          2. 使用以下命令安装 postgresql:conda install -c anaconda postgresql
          3. gem install pg

          我还以 ruby​​ 管理器的身份运行 rbenv.. 似乎效果很好。 bundler install 在安装 pg gem 后工作。

          【讨论】:

          • 也许它不会与权限混淆,而是隐藏 pg gem 编译所需的扩展。无论哪种方式,conda 都会阻止 gem。
          【解决方案8】:

          当您执行sudo gem install pg 时,gem 将安装在安装 ruby​​ 和 postgresql 的任何位置;当您执行gem install pg 时,gem 将安装在您的主目录中(请参阅您的消息!)。因此,鉴于您在本地工作的方式,您需要为所有宝石执行sudo bundle install blah-blah-blah。当然,还有其他选项,例如我不使用的 RVM。

          【讨论】:

          • 谢谢,每天都在学习新东西。不过我有点困惑。 Ruby 安装在我的主目录中:which ruby 返回/home/troyshu/.rvm/rubies/ruby-1.9.3-p194/bin/ruby。那么bundle install 是正确的运行命令吗(根据我原始帖子中的错误,这不起作用)?
          • 啊,你用的是rvm。这太棒了!许多人觉得它很有用。 rvm 网站上有一个完整的文档页面,它解释了如何做你想做的事情。你想要rvm exec gem install blah 之类的东西,或者类似的东西。
          • 好的。我试过rvm 1.9.3 do gem install pg -v '0.12.2',但它抛出了与我原来的帖子一样的错误。我认为这可能是一个 pg 版本错误,所以我尝试了 rvm 1.9.3 do gem install pg,它给出了同样的错误。
          • 要使用 RVM 安装 gem,只需要一个简单的gem install ...。其他任何事情通常都意味着你做错了。
          • 只有在 gem 可以找到的地方安装了 postgresql。
          猜你喜欢
          • 2013-02-20
          • 2015-03-16
          • 1970-01-01
          • 2023-03-11
          • 2012-03-28
          • 1970-01-01
          相关资源
          最近更新 更多