Ruby gem安装pg不';不要在OSX Lion上工作

Ruby gem安装pg不';不要在OSX Lion上工作,ruby,postgresql,rubygems,osx-lion,pg,Ruby,Postgresql,Rubygems,Osx Lion,Pg,这个问题有各种各样的说法,但似乎没有一个能解决我的问题 我正在运行OSX Lion(10.7.3)。已安装最新的XCode 我使用postgresap.com上的Postgres.app包安装了Postgres 但当我尝试安装pg gem时,我失败了: $ gem install pg -- --with-pg-config=/Applications/Postgres.app/Contents/MacOS/bin/pg_config Building native extensions. T

这个问题有各种各样的说法,但似乎没有一个能解决我的问题

我正在运行OSX Lion(10.7.3)。已安装最新的XCode

我使用postgresap.com上的Postgres.app包安装了Postgres

但当我尝试安装pg gem时,我失败了:

$ gem install pg -- --with-pg-config=/Applications/Postgres.app/Contents/MacOS/bin/pg_config
Building native extensions.  This could take a while...
ERROR:  Error installing pg:
    ERROR: Failed to build gem native extension.

        /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/bin/ruby extconf.rb --with-pg-config=/Applications/Postgres.app/Contents/MacOS/bin/pg_config
Using config values from /Applications/Postgres.app/Contents/MacOS/bin/pg_config
checking for libpq-fe.h... *** 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=/Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/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
/Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:381:in `try_do': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
    from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:506:in `try_cpp'
    from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:970:in `block in find_header'
    from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:790:in `block in checking_for'
    from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:284:in `block (2 levels) in postpone'
    from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:254:in `open'
    from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:284:in `block in postpone'
    from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:254:in `open'
    from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:280:in `postpone'
    from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:789:in `checking_for'
    from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:969:in `find_header'
    from extconf.rb:40:in `<main>'


Gem files will remain installed in /Users/disaacs/.rvm/gems/ruby-1.9.3-p125/gems/pg-0.13.2 for inspection.
Results logged to /Users/disaacs/.rvm/gems/ruby-1.9.3-p125/gems/pg-0.13.2/ext/gem_make.out
所有这些设置似乎都是正确的,除了CONFIGURE变量(它似乎是指其他计算机——我没有名为mattt的用户)

mkmf.log文件的内容如下

"/usr/bin/gcc-4.2 -o conftest -I/Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/include/ruby-1.9.1/x86_64-darwin10.8.0 -I/Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/include/ruby-1.9.1/ruby/backward -I/Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/include/ruby-1.9.1 -I. -I/Users/disaacs/.rvm/usr/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE   -I/Applications/Postgres.app/Contents/MacOS/include  -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration  -fno-common -pipe conftest.c  -L. -L/Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib -L/Users/disaacs/.rvm/usr/lib -L. -L/usr/local/lib -L/Applications/Postgres.app/Contents/MacOS/lib     -lruby.1.9.1  -lpthread -ldl -lobjc "
checked program was:
/* begin */
1: #include "ruby.h"
2:
3: int main() {return 0;}
/* end */
如有任何建议,将不胜感激

我查看了extconf.rb文件,经过一些调试,我发现它是对

find_header ('libpq-fe.h')
这是失败的。不是因为libpq fe.h不在那里,而是因为
find_header
方法本身失败了。我尝试使用irb运行find_header,但得到了相同的错误:

$ irb
1.9.3-p125 :001 > require 'mkmf'
 => true 
1.9.3-p125 :002 > find_header 'libpq-fe.h'
checking for libpq-fe.h... RuntimeError: The compiler failed to generate an executable file.
You have to install development tools first.
编辑:

我发现我的电脑肯定比我想象的更坏。我在为另一个项目进行bundle安装,在安装sqlite3 gem时也遇到了类似的失败

checking for sqlite3.h... *** extconf.rb failed ***

我以前从未遇到过sqlite3 gem的问题。

如果输出包括:

/Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/mkmf.rb:381:in `try_do': \
    The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
那么,您的编译环境确实存在一些问题。尤其是当失败是
extconf.rb
运行的第一个测试时


如果您安装了XCode,那么您可能没有安装XCode的命令行工具组件?它们是,所以您需要单独安装。

我也有类似的问题。根据bobfet1对a的回答,我能够通过以下方式安装gem:

sudo env ARCHFLAGS="-arch x86_64" gem install pg -- --with-pg-config=/Applications/Postgres.app/Contents/MacOS/bin/pg_config

我也遇到了这个问题,对我来说,答案是更新所有事物的RVM

rvm get head
rvm install 1.9.2

我终于找到了问题的原因!虽然我仍然不确定这个问题是如何产生的

查看install命令失败时创建的mkmf.log文件的内容(请参阅我的原始文章)。它记录运行以下命令的尝试

/usr/bin/gcc-4.2 ...and so on...
我的系统上没有
/usr/bin/gcc-4.2
。有一个
gcc
,它象征性地链接到
llvm-gcc-4.2
。我的解决方案是创建另一个符号链接

sudo ln -s llvm-gcc-4.2 gcc-4.2 
创建此链接后,我的
gem install pg
命令正常工作


我在《冰冻的加努克》的博文中找到了这个问题的解决方案。他推测这个问题可能是由XCode版本冲突引起的。无论什么原因,我永远的感谢

从应用商店安装xcode是不够的。您还需要xcode的命令行工具。

从应用商店安装xcode后,打开xcode。 转到Xcode->打开开发工具->更多开发工具 下载并安装最新的命令行工具

打开终端窗口并运行:
sudo gem install pg

我在山狮上,戴夫·艾萨克斯(Dave Isaacs)接受的答案对我很有用。我也不得不这样做

sudo ln -s llvm-g++-4.2 g++-4.2

我也是在山狮上,除了@grilix建议的“sudo ln-s/usr/bin/{llvm-,}gcc-4.2”之外,我还需要做:

sudo ln -s /usr/bin/{llvm-,}g++-4.2

没有像上面那样更新RVM本身(),而是重新安装了Ruby 2.0.0-p247,在尝试了上面的所有其他步骤后没有成功

rvm get head
rvm install 2.0.0
关于OSX小牛

sudo ln -s /usr/bin/llvm-gcc /usr/bin/gcc-4.2

在Mavericks 10.9上也存在类似的问题,但这是由于没有同意Xcode许可协议造成的。哎哟

运行
sudoxcodebuild
并同意垃圾。一切正常。

多亏了这个家伙:


在Mavericks上使用:
xcode选择--install
(假设您已经从应用商店安装了xcode)可以正常工作。

在Mavericks升级后

重新安装您的ruby版本

rvm uninstall 1.9.2-p320
然后

或者任何你拥有的ruby版本

$ gem install pg
如果失败:

$ sudo gem install pg
$ sudo find / -name “pg_config”
然后,如果失败:

$ sudo gem install pg
$ sudo find / -name “pg_config”
找到
pg_config
的位置后,运行此命令以最终安装它:

$ sudo gem install pg --with-pg-config=/usr/local/Cellar/postgresql/9.5.1/bin/pg_config
当然,您需要将路径更改为找到
pg\u config
的任何位置

然后,使用
gem list
检查已安装的gem,它应该显示如下内容:

gem列表显示正确的东西“>


更多信息可以在中找到。

该链接中问题的解决方案是安装最新的XCode。我已经安装了最新的XCode。您是否尝试过使用自制软件安装pq?同样值得尝试的是,看看
libpq
libpq dev
软件包是否可用。我尝试过使用自制软件安装postgres。I g安装gem时出现相同错误“检查libpq fe.h...**extconf.rb失败***“--libpq fe.h文件到底是什么?我查看了postgres安装的include文件,没有libpq fe.h文件。有一个libpq fs.h文件。mkmf.log文件在哪里?我最初没有安装命令行工具。但安装它们并没有什么区别。同样的错误仍在发生。这不会将我的Ruby版本降级到1.9.2吗?我试着升级到最新的RVM,但没什么不同。我试过了。没什么区别。我刚刚发现了一些新的东西,并更新了我原来的帖子。在
pg
之后单独发布
--
的目的是什么?没有它们似乎无法工作,但我不知道它们的用途。@jurassic From
gem help install
:“您可能需要指定库头和库的路径才能继续[构建扩展]。您可以通过在RubyGems的选项和扩展的构建选项之间添加--between来实现这一点。”。通常,
--
表示“以下参数不是选项”。例如,
rm---r
删除名为
-r
的文件。使用“sudo ln-s/usr/bin/{llvm-,}gcc-4.2”修复。谢谢我没有运行llvm-gcc-4.2“brew安装apple-gcc42”来获取/usr/bin/gcc-4.2(10.9.1),我在OS X 10.8.2上不需要它
sudo-ln-s/usr/bin/{llvm-,}gcc-4.2
起作用了。我不知道为什么没有标记