31

这个问题有很多变体,但似乎没有一个可以解决我的问题。

我正在运行 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 的问题。

4

13 回答 13

62

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

查看我的安装命令失败时创建的 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 Installation Ruby Gem with C Extension中找到了解决这个问题的方法。他推测问题可能是由 XCode 的版本冲突引起的。不管是什么原因,我永远的感谢!

于 2012-05-05T03:34:15.810 回答
19

在 OS X 小牛

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

作品。

于 2013-10-24T05:00:53.297 回答
15

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

sudo env ARCHFLAGS="-arch x86_64" gem install pg -- --with-pg-config=/Applications/Postgres.app/Contents/MacOS/bin/pg_config
于 2012-05-03T11:18:44.733 回答
13

感谢这个人: http: //www.computersnyou.com/2025/

在 Mavericks 上使用:(xcode-select --install假设您已经从应用商店安装了 Xcode)有效。

于 2013-11-04T19:59:44.100 回答
7

从应用商店安装 xcode 是不够的。您还需要 xcode 的命令行工具。 https://developer.apple.com/library/ios/#documentation/DeveloperTools/Conceptual/WhatsNewXcode/Articles/xcode_4_3.html

从应用商店安装 xcode 后,打开 xcode。转到 Xcode->Open Developer Tool->More Developer Tools 下载并安装最新的命令行工具。

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

于 2012-07-03T16:00:46.767 回答
6

Mavericks 10.9 上的类似问题——但它是由于未同意 Xcode 许可协议引起的。布莱赫。

运行sudo xcodebuild并同意垃圾。一切都按预期工作。

于 2013-11-03T19:19:56.943 回答
2

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

rvm get head
rvm install 1.9.2
于 2012-05-03T11:48:44.970 回答
2

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

sudo ln -s /usr/bin/{llvm-,}g++-4.2
于 2012-10-05T15:10:33.927 回答
2

小牛升级后...

重新安装你的 ruby​​ 版本。

rvm uninstall 1.9.2-p320

然后

rvm install 1.9.2-p320

或您拥有的任何版本的红宝石。

于 2014-06-12T00:15:27.617 回答
1

我在 Mountain Lion 上,Dave Isaacs 接受的答案对我有用。我也不得不做

sudo ln -s llvm-g++-4.2 g++-4.2
于 2012-07-27T16:58:51.473 回答
1

在尝试上述所有其他步骤但均未成功后,重新安装 Ruby 2.0.0-p247 并没有像上面那样更新 RVM 本身 ( https://stackoverflow.com/a/10430742/2807795 )。

rvm get head
rvm install 2.0.0
于 2013-10-02T00:20:38.303 回答
1
$ 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 gem list,它应该显示如下内容:

<code>gem list</code> 显示正确的东西

更多信息可以在我的指南中找到。

于 2016-03-18T16:45:13.917 回答
0

如果输出包括:

/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 的命令行工具组件?它们最近从 XCode 中分离出来,因此您需要单独安装它们。

于 2012-04-28T00:00:47.423 回答