ruby gem install pg 在 OSX Lion 上不起作用
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/10344821/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
gem install pg doesn't work on OSX Lion
提问by Dave Isaacs
There are variations of this question bouncing around SO, but none of them seem to have an answer that solves my problem.
这个问题有很多变体,但似乎没有一个可以解决我的问题。
I am running OSX Lion (10.7.3). The latest XCode is installed.
我正在运行 OSX Lion (10.7.3)。安装了最新的 XCode。
I've installed Postgres using the Postgres.app package from postgresapp.com.
我已经使用 postgresapp.com 上的 Postgres.app 包安装了 Postgres。
But when I try to install the pg gem, I get a failure:
但是当我尝试安装 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
The output of the /Applications/Postgres.app/Contents/MacOS/bin/pg_configcommand is:
/Applications/Postgres.app/Contents/MacOS/bin/pg_config命令的输出是:
$ /Applications/Postgres.app/Contents/MacOS/bin/pg_config
BINDIR = /Applications/Postgres.app/Contents/MacOS/bin
DOCDIR = /Applications/Postgres.app/Contents/MacOS/share/doc
HTMLDIR = /Applications/Postgres.app/Contents/MacOS/share/doc
INCLUDEDIR = /Applications/Postgres.app/Contents/MacOS/include
PKGINCLUDEDIR = /Applications/Postgres.app/Contents/MacOS/include
INCLUDEDIR-SERVER = /Applications/Postgres.app/Contents/MacOS/include/server
LIBDIR = /Applications/Postgres.app/Contents/MacOS/lib
PKGLIBDIR = /Applications/Postgres.app/Contents/MacOS/lib
LOCALEDIR = /Applications/Postgres.app/Contents/MacOS/share/locale
MANDIR = /Applications/Postgres.app/Contents/MacOS/share/man
SHAREDIR = /Applications/Postgres.app/Contents/MacOS/share
SYSCONFDIR = /Applications/Postgres.app/Contents/MacOS/etc
PGXS = /Applications/Postgres.app/Contents/MacOS/lib/pgxs/src/makefiles/pgxs.mk
CONFIGURE = '--prefix=/Users/mattt/Code/heroku/Postgres/Postgres/Vendor/postgres' '--enable-thread-safety' '--with-openssl' '--with-gssapi' '--with-bonjour' '--with-krb5' '--with-libxml' '--with-libxslt' '--with-ossp-uuid' '--with-perl' '--with-python'
CC = gcc
CPPFLAGS = -I/usr/include/libxml2
CFLAGS = -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wformat-security -fno-strict-aliasing -fwrapv
CFLAGS_SL =
LDFLAGS = -Wl,-dead_strip_dylibs
LDFLAGS_EX =
LDFLAGS_SL =
LIBS = -lpgport -lxslt -lxml2 -lssl -lcrypto -lgssapi_krb5 -lz -lreadline -lm
VERSION = PostgreSQL 9.1.3
All those setting appear to be correct, except for the CONFIGURE variable (which seems to be referring to some other computer --I have no user named mattt).
所有这些设置似乎都是正确的,除了 CONFIGURE 变量(它似乎指的是其他计算机——我没有名为 mattt 的用户)。
The contents of the mkmf.log file are
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 */
Any suggestions would be appreciated.
任何建议,将不胜感激。
I've looked at the extconf.rb file, and after some debugging I've found that it is a call to
我查看了 extconf.rb 文件,经过一些调试后,我发现它是对
find_header ('libpq-fe.h')
that is failing. Not because libpq-fe.h is not there, but because the find_headermethod itself is failing. I tried running find_header using irb, and got the same error:
那是失败。不是因为 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.
EDIT:
编辑:
Found out my computer must be even more borked than I thought. I was doing bundle install for another project, and I got a very similar failure installing the sqlite3 gem.
发现我的电脑一定比我想象的更无聊。我正在为另一个项目进行捆绑安装,并且在安装 sqlite3 gem 时遇到了非常类似的失败。
checking for sqlite3.h... *** extconf.rb failed ***
I've never had problems with the sqlite3 gem in the past.
我过去从来没有遇到过 sqlite3 gem 的问题。
回答by Dave Isaacs
I finally found the cause of the problem! Though I am still uncertain how this problem came about.
我终于找到了问题的原因!虽然我仍然不确定这个问题是如何产生的。
Look at the contents of the mkmf.log file that is created when my install command fails (see my original post). It logs an attempt to run the following command
查看我的安装命令失败时创建的 mkmf.log 文件的内容(请参阅我的原始帖子)。它记录了运行以下命令的尝试
/usr/bin/gcc-4.2 ...and so on...
There is no /usr/bin/gcc-4.2on my system. There is a gcc, which is symbolically linked to llvm-gcc-4.2. My solution was to create another symbolic link
/usr/bin/gcc-4.2我的系统上没有。有一个gcc,它象征性地链接到 llvm-gcc-4.2。我的解决方案是创建另一个符号链接
sudo ln -s llvm-gcc-4.2 gcc-4.2
After making this link, my gem install pgcommand worked without any problems.
创建此链接后,我的gem install pg命令可以正常工作。
I found the solution to this problem on the Frozen Canuck blog in the post Error Installing Ruby Gem with C Extension. He speculates that the problem can be caused by conflicting versions of XCode. whatever the cause, my eternal thanks!
我在 Frozen Canuck 博客上的错误安装带有 C 扩展的 Ruby Gem一文中找到了这个问题的解决方案。他推测该问题可能是由冲突的 XCode 版本引起的。不管是什么原因,我永远的感谢!
回答by guapolo
On OS X Mavericks
在 OS X Mavericks 上
sudo ln -s /usr/bin/llvm-gcc /usr/bin/gcc-4.2
works.
作品。
回答by spirossi
I had a similar issue. Following an answer by bobfet1 for a similar issueI was able to get the gem installed by:
我有一个类似的问题。按照 bobfet1 对类似问题的回答,我能够通过以下方式安装 gem:
sudo env ARCHFLAGS="-arch x86_64" gem install pg -- --with-pg-config=/Applications/Postgres.app/Contents/MacOS/bin/pg_config
回答by pjammer
Thanks to this guy: http://www.computersnyou.com/2025/
感谢这个人:http: //www.computersnyou.com/2025/
On Mavericks using: xcode-select --install(assuming you have installed Xcode from the app store) works.
在 Mavericks 上使用:(xcode-select --install假设您已经从应用商店安装了 Xcode)工作。
回答by Brandon Kearby
Installing xcode from the app store is not enough. You will also need xcode's command line tools. https://developer.apple.com/library/ios/#documentation/DeveloperTools/Conceptual/WhatsNewXcode/Articles/xcode_4_3.html
从应用商店安装 xcode 是不够的。您还需要 xcode 的命令行工具。 https://developer.apple.com/library/ios/#documentation/DeveloperTools/Conceptual/WhatsNewXcode/Articles/xcode_4_3.html
After installing xcode from the app store, open xcode. Goto Xcode->Open Developer Tool->More Developer Tools Download and install the latest command line tools.
从应用商店安装 xcode 后,打开 xcode。前往 Xcode->Open Developer Tool->More Developer Tools 下载并安装最新的命令行工具。
Open a terminal window and run: sudo gem install pg
打开终端窗口并运行:sudo gem install pg
回答by trisweb
Similar problem on Mavericks 10.9 -- but it was caused by not having agreed to the Xcode license agreement. Blech.
Mavericks 10.9 上的类似问题——但它是由于未同意 Xcode 许可协议引起的。布莱克。
Run sudo xcodebuildand agree to the junk. The everything works as expected.
运行sudo xcodebuild并同意垃圾。一切都按预期工作。
回答by Kevin Monk
After a Mavericks upgrade...
小牛升级后...
Reinstall your ruby version.
重新安装您的 ruby 版本。
rvm uninstall 1.9.2-p320
then
然后
rvm install 1.9.2-p320
or whatever version of ruby you have.
或您拥有的任何版本的 ruby。
回答by izilotti
I too, am on Mountain Lion, besides the "sudo ln -s /usr/bin/{llvm-,}gcc-4.2" suggested by @grilix, I needed to do:
我也在 Mountain Lion 上,除了@grilix 建议的“sudo ln -s /usr/bin/{llvm-,}gcc-4.2”之外,我还需要做:
sudo ln -s /usr/bin/{llvm-,}g++-4.2
回答by philoye
I also ran into this issue, for me the answer was updating RVM of all things.
我也遇到了这个问题,对我来说,答案是更新所有事物的 RVM。
rvm get head
rvm install 1.9.2
回答by Rick Colosimo
Rather than updating RVM itself (https://stackoverflow.com/a/10430742/2807795), as above, it was the reinstallation of Ruby 2.0.0-p247 that did the trick, after trying all the other steps above without success.
如上所述,与其更新 RVM 本身(https://stackoverflow.com/a/10430742/2807795),不如重新安装 Ruby 2.0.0-p247,在尝试了上述所有其他步骤后都没有成功。
rvm get head
rvm install 2.0.0

