gem install pg 在 OSX Lion 上不起作用
Posted
技术标签:
【中文标题】gem install pg 在 OSX Lion 上不起作用【英文标题】:gem install pg doesn't work on OSX Lion 【发布时间】:2012-05-07 20:36:35 【问题描述】:这个问题有很多变体,但似乎没有一个可以解决我的问题。
我正在运行 OSX Lion (10.7.3)。已安装最新的 XCode。
我已经使用 postgresapp.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
/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
所有这些设置似乎都是正确的,除了 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.
编辑:
发现我的电脑肯定比我想象的还要糟糕。我正在为另一个项目进行捆绑安装,安装 sqlite3 gem 时遇到了非常相似的失败。
checking for sqlite3.h... *** extconf.rb failed ***
我过去从未遇到过使用 sqlite3 gem 的问题。
【问题讨论】:
***.com/questions/8548809/… 该链接中问题的解决方案是安装最新的 XCode。我已经安装了最新的 XCode。 你试过用自制软件安装 pq 吗?另外值得一试的是查看libpq
或libpq-dev
包是否可用。
我尝试使用 Homebrew 安装 postgres。安装 gem "检查 libpq-fe.h... *** extconf.rb failed ***" 时出现同样的错误 -- libpq-fe.h 文件到底是什么?我查看了使用 postgres 安装的包含文件,没有 libpq-fe.h 文件。有一个 libpq-fs.h 文件。
mkmf.log 文件在哪里?
【参考方案1】:
我终于找到问题的原因了!虽然我仍然不确定这个问题是如何产生的。
查看我的安装命令失败时创建的 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
命令运行没有任何问题。
我在 Frozen Canuck 博客 Error Installing Ruby Gem with C Extension 的帖子中找到了解决此问题的方法。他推测问题可能是由 XCode 的版本冲突引起的。不管是什么原因,我永远的感谢!
【讨论】:
用“sudo ln -s /usr/bin/llvm-,gcc-4.2”修复。谢谢! 我没有 llvm-gcc-4.2 运行“brew install apple-gcc42”获取 /usr/bin/gcc-4.2 (10.9.1)【参考方案2】:在 OS X Mavericks 上
sudo ln -s /usr/bin/llvm-gcc /usr/bin/gcc-4.2
有效。
【讨论】:
【参考方案3】:我遇到了类似的问题。根据 bobfet1 对similar issue 的回答,我能够通过以下方式安装 gem:
sudo env ARCHFLAGS="-arch x86_64" gem install pg -- --with-pg-config=/Applications/Postgres.app/Contents/MacOS/bin/pg_config
【讨论】:
我试过这个。没有区别。我刚刚发现了一些新的东西并更新了我原来的帖子。pg
之后的孤单--
的目的是什么?没有它们似乎行不通,但我不知道它们是干什么用的。
@jurassic 来自gem help install
:“您可能需要指定库头文件和库的路径才能继续[构建扩展]。您可以通过在 RubyGems 之间添加 --选项和扩展的构建选项”。通常,--
表示“以下参数不是选项”。例如。 rm -- -r
删除名为 -r
的文件。【参考方案4】:
感谢这个人:http://www.computersnyou.com/2025/
在 Mavericks 上使用:xcode-select --install
(假设您已经从应用商店安装了 Xcode)有效。
【讨论】:
我不知道为什么这没有被标记为答案,但考虑到最初的问题,它绝对是一针见血。谢谢@pjammer【参考方案5】:从应用商店安装 xcode 是不够的。您还需要 xcode 的命令行工具。 https://developer.apple.com/library/ios/#documentation/DeveloperTools/Conceptual/WhatsNewXcode/Articles/xcode_4_3.html
从应用商店安装 xcode 后,打开 xcode。 转到Xcode->打开开发者工具->更多开发者工具 下载并安装最新的命令行工具。
打开终端窗口并运行: sudo gem install pg
【讨论】:
【参考方案6】:在 Mavericks 10.9 上也出现了类似问题——但这是由于未同意 Xcode 许可协议造成的。布莱赫。
运行sudo xcodebuild
并同意垃圾邮件。一切都按预期工作。
【讨论】:
【参考方案7】:我也遇到了这个问题,对我来说,答案是更新所有东西的 RVM。
rvm get head
rvm install 1.9.2
【讨论】:
这不会将我的 Ruby 版本降级到 1.9.2 吗?我尝试升级到最新的 RVM,但没有任何作用。【参考方案8】:我也在 Mountain Lion 上,除了@grilix 建议的“sudo ln -s /usr/bin/llvm-,gcc-4.2”,我还需要做:
sudo ln -s /usr/bin/llvm-,g++-4.2
【讨论】:
【参考方案9】:小牛升级后...
重新安装你的 ruby 版本。
rvm uninstall 1.9.2-p320
然后
rvm install 1.9.2-p320
或者你拥有的任何版本的 ruby。
【讨论】:
【参考方案10】:我在 Mountain Lion 上,Dave Isaacs 接受的回答对我有用。我也不得不这样做
sudo ln -s llvm-g++-4.2 g++-4.2
【讨论】:
我在 OS X 10.8.2 上不需要它。sudo ln -s /usr/bin/llvm-,gcc-4.2
工作。【参考方案11】:
不是像上面那样更新 RVM 本身 (https://***.com/a/10430742/2807795),而是重新安装 Ruby 2.0.0-p247 解决了这个问题,在尝试了上述所有其他步骤后没有成功。
rvm get head
rvm install 2.0.0
【讨论】:
【参考方案12】:$ gem install pg
如果失败:
$ 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_config
的任何位置。
然后,使用 gem list
检查已安装的 gem,它应该显示如下内容:
更多信息可以在my guide找到。
【讨论】:
【参考方案13】:如果输出包括:
/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 的命令行工具组件?它们是recently split out from XCode proper,因此您需要单独安装它们。
【讨论】:
我最初没有安装命令行工具。但是安装它们没有任何区别。同样的错误仍在发生。以上是关于gem install pg 在 OSX Lion 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章
gem install pg 在 Mac El Capitan 上不起作用
gem install pg --with-pg-config 有效,捆绑失败
运行 gem install pg -v '0.15.1' 时出错