Подтвердить что ты не робот

Gem install pg не работает на OSX Lion

Существуют вариации этого вопроса, подпрыгивающие вокруг SO, но ни у одного из них, похоже, нет ответа, который решает мою проблему.

Я запускаю OSX Lion (10.7.3). Установлен последний XCode.

Я установил Postgres, используя пакет Postgres.app из postgresapp.com.

Но когда я пытаюсь установить 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 терпит неудачу. Я попытался запустить find_header с помощью irb и получил ту же ошибку:

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

Узнал, что мой компьютер должен быть еще более бурным, чем я думал. Я делал установку пакета для другого проекта, и у меня был очень похожий отказ, устанавливающий камень sqlite3.

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

У меня никогда не было проблем с камнем sqlite3 в прошлом.

4b9b3361

Ответ 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 в сообщении Ошибка установки Ruby Gem с расширением C. Он предполагает, что проблема может быть вызвана противоречивыми версиями XCode. независимо от причины, моя вечная благодарность!

Ответ 2

В OS X Mavericks

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

работы.

Ответ 3

У меня была аналогичная проблема. После ответа bobfet1 на аналогичную проблему я смог получить камень, установленный:

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

Ответ 4

Благодаря этому парню: http://www.computersnyou.com/2025/

В Mavericks с использованием: xcode-select --install (при условии, что вы установили Xcode из магазина приложений).

Ответ 5

Установка xcode из магазина приложений недостаточно. Вам также понадобятся инструменты командной строки xcode. https://developer.apple.com/library/ios/#documentation/DeveloperTools/Conceptual/WhatsNewXcode/Articles/xcode_4_3.html

После установки xcode из магазина приложений откройте xcode. Перейти к Xcode- > Open Developer Tool- > Дополнительные инструменты для разработчиков Загрузите и установите последние инструменты командной строки.

Откройте окно терминала и запустите:  sudo gem install pg

Ответ 6

Аналогичная проблема с Mavericks 10.9 - но это было вызвано не соглашением с лицензионным соглашением Xcode. Blech.

Запустите sudo xcodebuild и соглашайтесь с барахлом. Все работает так, как ожидалось.

Ответ 7

Я также столкнулся с этой проблемой, для меня ответ был обновлением RVM всех вещей.

rvm get head
rvm install 1.9.2

Ответ 8

Я тоже, на Mountain Lion, помимо "sudo ln -s/usr/bin/{llvm-,}gcc-4.2", предложенного @grilix, мне нужно было сделать:

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

Ответ 9

После обновления Mavericks...

Переустановите рубиновую версию.

rvm uninstall 1.9.2-p320

затем

rvm install 1.9.2-p320

или любой другой версии рубина, который у вас есть.

Ответ 10

Я на Горном Льве, и принятый ответ от Дейва Айзекса работал на меня. Я также должен был сделать

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

Ответ 11

Вместо того, чтобы обновлять RVM (fooobar.com/questions/174770/...), как и выше, это была переустановка 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, и он должен показать что-то вроде этого:

<code>gem list</code> showing the right things

Более подробную информацию можно найти в мой путеводитель.

Ответ 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? Они были недавно расстались с XCode надлежащим образом, поэтому вам нужно установить их отдельно.