Вопрос по postgresql, ruby, rubygems, osx-lion, pg – gem install pg не работает на OSX Lion

30

Есть варианты этого вопроса, связанные с SO, но ни у одного из них нет ответа, который решает мою проблему.

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

Я установил Postgres с помощью пакета Postgres.app от postgresapp.com.

Но когда я пытаюсь установить гем pg, я получаю ошибку:

<code>$ 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
</code>

Выход из/Applications/Postgres.app/Contents/MacOS/bin/pg_config команда является:

<code>$ /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
</code>

Все эти настройки кажутся правильными, за исключением переменной CONFIGURE (которая, похоже, относится к другому компьютеру - у меня нет пользователя с именем mattt).

Содержимое файла mkmf.log

<code>"/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 */
</code>

Мы ценим любые предложения.

Я посмотрел на файл extconf.rb и после некоторой отладки обнаружил, что это вызов

<code>find_header ('libpq-fe.h')
</code>

это терпит неудачу. Не потому, что там нет libpq-fe.h, а потому чтоfind_header Сам метод терпит неудачу. Я попытался запустить find_header с использованием irb, и получил ту же ошибку:

<code>$ 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.
</code>

EDIT:

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

<code>checking for sqlite3.h... *** extconf.rb failed ***
</code>

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

Где находится файл mkmf.log? Jason Gross
Я попытался установить postgres с помощью Homebrew. Я получаю ту же ошибку при установке гема & quot; проверка на наличие libpq-fe.h ... *** ошибка extconf.rb *** & quot; Что такое файл libpq-fe.h? Я посмотрел во включаемых файлах, которые были установлены с postgres, и нет файла libpq-fe.h. Есть файл libpq-fs.h. Dave Isaacs
Решение проблемы по этой ссылке - установить последнюю версию XCode. У меня уже установлена последняя версия XCode. Dave Isaacs
Вы пытались установить pq с помощью homebrew? Также стоит попробовать, еслиlibpq или жеlibpq-dev пакеты доступны. tiredpixel

Ваш Ответ

13   ответов
15

аналогичная проблема Мне удалось установить драгоценный камень:

sudo env ARCHFLAGS="-arch x86_64" gem install pg -- --with-pg-config=/Applications/Postgres.app/Contents/MacOS/bin/pg_config
Какова цель одинокого-- послеpg? Кажется, это не работает без них, но я не знаю, для чего они.
Я попробовал это. Не сделал разницы Я только что узнал кое-что новое и обновил свой оригинальный пост. Dave Isaacs
@jurassic Fro, мgem help install: & quot; Вам может потребоваться указать путь к заголовкам и библиотекам библиотеки, чтобы продолжить [для создания расширения]. Вы можете сделать это, добавив - между RubyGems & apos; параметры и параметры сборки расширения ". В общем,-- означает «следующие аргументы не являются опциями». Например.rm -- -r удаляет файл с именем-r.
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, поэтому вам нужно установить их отдельно.

У меня изначально не было установленных инструментов командной строки. Но установка их не имела никакого значения. Та же самая ошибка все еще происходит. Dave Isaacs
7

бятся инструменты командной строки xcode. https://developer.apple.com/library/ios/#documentation/DeveloperTools/Conceptual/WhatsNewXcode/Articles/xcode_4_3.html

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

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

Это правильный ответ.
2

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

rvm uninstall 1.9.2-p320

затем

rvm install 1.9.2-p320

или какая-либо версия рубина у вас есть.

1

Вместо обновления самого RVM (https://stackoverflow.com/a/10430742/2807795), как и выше, это была переустановка Ruby 2.0.0-p247, которая добилась цели, безуспешно выполнив все остальные шаги, описанные выше.

rvm get head
rvm install 2.0.0
6

что вы не согласились с лицензионным соглашением XCode. Blech.

Бежатьsudo xcodebuild и согласиться на барахло. Все работает как положено.

62

как возникла эта проблема.

Посмотрите на содержимое файла mkmf.log, который создается при сбое моей команды установки (см. Мой оригинальный пост). Он регистрирует попытку выполнить следующую команду

/usr/bin/gcc-4.2 ...and so on...

Здесь нет/usr/bin/gcc-4.2 в моей системе. Eстьgcc, который символически связан сllvm-gcc-4.2, Моим решением было создать еще одну символическую ссылку

sudo ln -s llvm-gcc-4.2 gcc-4.2 

Сделав эту ссылку, мойgem install pg Команда работала без проблем.

Я нашел решение этой проблемы в блоге Frozen Canuck в посте.Ошибка установки Ruby Gem с расширением C, Он предполагает, что проблема может быть вызвана конфликтующими версиями XCode. В любом случае, моя вечная благодарность!

У меня не было llvm-gcc-4.2 Запустить "brew install apple-gcc42" получить /usr/bin/gcc-4.2 (10.9.1)
Исправлено с помощью команды "sudo ln -s /usr/bin/ enjllvm-,‹gcc-4.2" ;. Спасибо!
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 listи он должен показать что-то вроде этого:

codegem list/code showing the right things

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

1

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

sudo ln -s llvm-g++-4.2 g++-4.2
Мне это не нужно в OS X 10.8.2.sudo ln -s /usr/bin/{llvm-,}gcc-4.2 работал.
2

для меня ответом было обновление RVM всех вещей.

rvm get head
rvm install 1.9.2
Разве это не понизило бы мою версию Ruby до 1.9.2? Я попытался обновить до последней версии RVM, но это не имело значения. Dave Isaacs
2

sudo ln -s /usr/bin/ndomllvm-,‹gcc-4.2" предложенный @grilix, мне нужно было сделать:

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

На OS X Маверикс

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

работает.

13

http://www.computersnyou.com/2025/

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

Я не уверен, почему это не было отмечено как ответ, но это абсолютно ударяет гвоздь в голову, рассматривая начальный вопрос. Спасибо @pjammer

Похожие вопросы