【问题标题】:Can't find the 'libpq-fe.h header when trying to install pg gem尝试安装 pg gem 时找不到'libpq-fe.h 标头
【发布时间】:2011-08-27 18:56:21
【问题描述】:

我使用的是 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

我该如何解决这个问题?

【问题讨论】:

  • 你能证明你已经安装了pg吗?

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


【解决方案1】:

对于 alpine,请使用下面的方法修复错误

apk add --no-cache postgresql-dev

【讨论】:

    【解决方案2】:

    只是缺少libpq-fe.h的问题

    在 ubuntu 上,我们只需要运行: sudo apt-get install libpq-dev

    上面的命令将安装一个新的包libpq-dev,之后你可以再次执行bundle install来恢复你的包安装。

    【讨论】:

    • 工作就像一个魅力! sudo apt-get install libpq-dev && cd project-directory && bundle install.
    【解决方案3】:

    在 Fedora 32 上,我通过专门安装 libpq5-devel 设法解决了同样的问题。

    如果您从官方存储库安装 postgresql,您将有多个版本无法解决问题,因此实际上需要尝试哪个版本。

    【讨论】:

    • 不让我编辑你的答案,你错过了一封信,应该是libpq5-devel。不过还是有帮助的,谢谢。
    • 我发誓我已经注意到并修复了它,但我想我只是想了一下。感谢您指出。
    【解决方案4】:

    在 Ubuntu 20.04 上,我已经有了 libpq5:amd64 版本 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
    

    在那之后我一直在愉快地使用宝石。没有额外的安装或任何东西。

    【讨论】:

      【解决方案5】:

      Ubuntu 20.04.1 LTS,这似乎对我有用:

      sudo apt-get install ruby ruby-dev libpqxx-dev libpq-fe-dev libpq-dev 
      sudo gem install pg -- --with-pg-config=/usr/include/postgresql/pg_config --with-pg-include=/usr/include/postgresql/
      

      【讨论】:

      • ls /usr/include/postgresql/libpq-fe.h /usr/include/postgresql/pg_config 可用于检查文件是否存在。
      【解决方案6】:

      我已经尝试了所有解决方案,但只能在命令下工作

      pip install psycopg2-binary
      

      【讨论】:

        【解决方案7】:

        我对 Fedora 30 的解决方案:

        sudo dnf install /usr/include/libpq-fe.h
        

        【讨论】:

        • 我想找个时间给你买杯啤酒。这是 Centos 7/8 经过数小时的努力后唯一有效的方法
        • 谢谢!它在 Fedora 35 上对我有用
        【解决方案8】:

        我在通过 asdf 安装 postgres 时遇到了同样的错误。 pg-config 解决方案对我不起作用。相反,我必须找到包含该文件的 postgres 包含文件夹并使用 --with-pg-include 标志运行命令

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

        【讨论】:

        • 注意:/&lt;path&gt;/.asdf/installs/postgres/&lt;version&gt;asdf where postgres 返回
        【解决方案9】:

        ma​​cOS(之前为 Mac OS XOS X)上,使用 Homebrew 安装正确的标头:

        brew install postgresql
        

        然后运行

        gem install pg
        

        应该可以。

        或者,您可以brew install libpq 并导出正确的PATHPKG_CONFIG_PATH,而不是安装整个postgresql,如“注意事项”部分所述

        【讨论】:

        • 如果您也在使用 Postgres.app,这会导致任何问题吗?
        • 运行 brew install postgressql 后我运行 ARCHFLAGS="-arch x86_64" gem install pg 并且工作正常。
        • 或者,只需在 mac OSX 上运行 brew install libpqxx 就足够了
        • @RicardoSaporta libpqxxpostgresql 安装为依赖项,因此它与brew install postgresql 基本相同
        • 您可以brew install libpq 并导出正确的PATHPKG_CONFIG_PATH,而不是安装整个postgresql,如“注意事项”部分所述。
        【解决方案10】:

        在 Ubuntu 中,标头似乎是 libpq-dev package 的一部分(至少在以下 Ubuntu 版本中: 11.04 (Natty Narwhal), 10.04 (Lucid Lynx), 11.10 (Oneiric Ocelot), 12.04 (Precise Pangolin), 14.04 (Trusty Tahr) 和 18.04 (Bionic Beaver)):

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

        因此,请尝试为您的操作系统安装 libpq-dev 或其等效项:

        • 对于 Ubuntu/Debian 系统:sudo apt-get install libpq-dev
        • Red Hat Linux (RHEL) 系统上:yum install postgresql-devel
        • 对于 Mac Homebrew: brew install postgresql
        • 对于 Mac MacPorts PostgreSQL:gem install pg -- --with-pg-config=/opt/local/lib/postgresql[version number]/bin/pg_config
        • 对于OpenSusezypper in postgresql-devel
        • 对于ArchLinuxpacman -S postgresql-libs

        【讨论】:

        • 在 ubuntu 11.04 durrantm@castleLinux2011:~/Dropbox_not_syncd/webs/3/linker$ gem install libpq-dev ERROR: Could not find a valid gem 'libpq-dev' (&gt;= 0) in any repository durrantm@castleLinux2011:~/Dropbox_not_syncd/webs/3/linker$ 987654343@ 上对我不起作用
        • 如果您需要安装 javascript 库... gem install 'execjs' 和 gem install 'therubyracer'
        • 请修改您的答案以包括 apt-get install postgres-server-dev-{pg.version} 您的答案不再适用于 Ubuntu 14.04 上的 postgresql 9.4 请参阅:stackoverflow.com/a/28837453/75194
        • 当我执行命令时:sudo apt-get install libpq-dev,我得到一个响应 - “无法找到包”。所以我执行sudo apt-get update,然后执行“sudo apt-get install libpq-dev”。终于成功安装了。
        • 这对我有用,我已经安装了 Postgres,我只需要执行 sudo apt-get install libpq-dev 然后 bundle install 并且错误消失了。谢谢
        【解决方案11】:

        第 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) 转到步骤 2 中运行的命令列出的所有文件,并手动将 libpq-fe.h 更改为 postgresql/libpq-fe.h

        【讨论】:

          【解决方案12】:

          对于 Mac OS X,只需安装 https://postgresapp.com/ 并按照命令行部分和 ruby​​ 的步骤操作

          sudo mkdir -p /etc/paths.d &&
          echo /Applications/Postgres.app/Contents/Versions/latest/bin | sudo tee /etc/paths.d/postgresapp
          

          然后

          sudo ARCHFLAGS="-arch x86_64" gem install pg
          

          【讨论】:

            【解决方案13】:

            我在使用 Postgresql 9.6 时遇到了这个问题。我能够通过这样做来解决它:

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

            【讨论】:

              【解决方案14】:

              对于没有安装 PostgreSQL 服务器的 MacOS

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

              【讨论】:

                【解决方案15】:

                在 Ubuntu 上,安装“libpq-dev”来解决这个问题。

                sudo apt-get install libpq-dev
                

                【讨论】:

                • 如果不够,在libpq-dev前加sudo apt-get install postgresql
                【解决方案16】:

                我刚刚在 OSX 上运行 brew 和 postgres@9.4

                我的解决办法是这样的:

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

                【讨论】:

                  【解决方案17】:

                  在 Arch Linux 上,您需要安装 postgresql-libs:

                  sudo pacman -Syu postgresql-libs
                  

                  【讨论】:

                    【解决方案18】:

                    我终于解决了这个问题,但没有使用前面描述的方法。

                    使用brew install postgresql,我发现它已经安装了,但没有链接。

                    1. 找出 PostgreSQL 的安装位置,然后将其删除,

                    2. 然后brew install postgresql

                    3. brew link postgresql

                    4. gem install pg

                    【讨论】:

                    • "brew link --force postgresql" 为我工作,但在此之前我必须运行 'export PATH="/usr/local/opt/postgresql@9.4/bin:$PATH"' >> ~/.bash_profile
                    【解决方案19】:

                    在 Mac 上,我使用以下代码解决了这个问题:

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

                    【讨论】:

                      【解决方案20】:

                      仅作记录:

                      带有 PostgresApp 的 OS X 中的 Ruby on Rails 4 应用程序(在这种情况下需要 0.17.1 版本 - 有点像旧项目):

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

                      【讨论】:

                      • 如果您使用美妙的Postgres.app,效果会很好。对于 Postgres 10,我使用了路径 /Applications/Postgres.app/Contents/Versions/10/bin/pg_config
                      【解决方案21】:

                      在 OS X 和 MacPorts 上,不再需要用于 PostgreSQL 的 -devel 包。安装pg gem 的工作方式如下:

                      ~ > sudo port install postgresql-devel
                      ...
                      Error: postgresql-devel has been replaced by postgresql91; please install that port instead
                      ~ > gem install pg -v '0.17.1' -- --with-pg-config=/opt/local/lib/postgresql95/bin/pg_config
                      

                      另见this post

                      【讨论】:

                      • port select --set postgresql postgresql96 或您安装到活动符号链接的任何其他版本,包括pg_config
                      【解决方案22】:

                      我在 Amazon Linux 上遇到了同样的问题。我可以找到标题libpq-fe.h,但不知何故它不起作用。

                      它来自通过机器上不同用户安装的不同版本的软件包。已安装 PostgreSQL 9.2 和 PostgreSQL 9.3。因此,在包含库之前,请确保您的 PostgreSQL 版本。

                      对我来说,神奇的命令行是:

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

                      来源:An almost idiot's guide to install PostgreSQL 9.3, PostGIS 2.1 and pgRouting with Yum

                      【讨论】:

                      • 安装库后...进行清理:“make distclean”、“make clean”、“./configure”并开始编译!
                      【解决方案23】:

                      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_configbin 目录将与include 目录位于同一目录中。正如错误提示,使用 --with-pg-config 选项安装 gem:

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

                      请注意,如果您从未使用过 locate 或者您在安装 PostgreSQL 后没有更新,则可能需要运行 updatedb

                      【讨论】:

                      • --with-pg-config=... 之前没有-- 我得到一个错误:ERROR: While execution gem ... (OptionParser::InvalidOption) invalid option: --with-pg-config =/usr/bin/pg_config)
                      【解决方案24】:

                      对于使用 Postgres.app 的 Mac 用户,正确的答案是针对该软件包提供的 libpq 进行构建。例如,对于 9.4 版本(撰写本文时为当前版本),您只需要:

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

                      这将使您的pg gem 与您安装的 PostgreSQL 版本完全同步。在这种情况下,从 Homebrew 安装一些东西是一种浪费。

                      【讨论】:

                        【解决方案25】:

                        我最近升级到 Mac OS X v10.10 (Yosemite),但在构建 pg gem 时遇到了困难。

                        报告的错误是典型的:

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

                        我的解决方案是 gem uninstall pg 然后 bundle update pg 用最新的替换 gem。在 Yosemite 安装后,我确实运行了 brew update; brew upgrade 以获取我之前安装的最新版本的软件包。

                        【讨论】:

                          【解决方案26】:

                          我找到了这个答案,这是唯一一个对我有用的答案(Mac OS)——经过大约两天的研究:

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

                          查看堆栈溢出问题Can't find the PostgreSQL client library (libpq)

                          【讨论】:

                          • 谢谢,这只是一个对我有用的!
                          【解决方案27】:

                          OS X 10.9(小牛队),我brew-installed postgresql,然后我不得不rvm reinstall我的Ruby。我现在很开心:)

                          【讨论】:

                            【解决方案28】:

                            我在 Mac OS 上遇到了同样的问题,但我通过在终端中使用以下命令轻松安装了 PostgreSQL gem:

                            ARCHFLAGS="-arch x86_64" gem install pg
                            

                            (我先用brew install postgresql安装了PostgreSQL。)

                            【讨论】:

                              【解决方案29】:

                              在 CentOS 6.5 (Squeeze) 下我创建了一个文件:

                              $ 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 配置 - 更改 profile.d 配置 - 您应该重新加载 Bash。

                              【讨论】:

                              • 你是如何安装 postgres 的?我将pg_* 脚本符号链接到路径中,如下所示:ln -s /usr/pgsql-9.3/bin/p* /usr/local/bin。之后我就不需要任何额外的脚本或环境变量了。
                              【解决方案30】:

                              Debian 7.0、64 位 (Wheezy) 上运行:

                              sudo apt-get install libpq-dev
                              

                              成功安装 libpq-dev 后,运行:

                              bundle install
                              

                              【讨论】:

                                猜你喜欢
                                • 2015-05-03
                                • 2012-10-16
                                • 1970-01-01
                                • 2018-10-20
                                • 2020-03-16
                                • 2015-01-30
                                • 2020-03-04
                                相关资源
                                最近更新 更多