Проблема установки пакета: отсутствует mysql.h

В моем 32-битном Mac OSX 10.6 я могу установить gem mysql2 довольно легко, но не на мини-Mac 10.6 64-битном сервере.

Я установил MySQL 5.5.11 на проблемном сервере, в то время как в моем домашнем Mac MySQL 5.5.0.m2 Каким-то образом, когда я запускаю пакетную установку, на сервере он пытается установить mysql2.0.3.2 в то время как дома mysql2.0.2.6

Пожалуйста, не говорите мне

env ARCHFLAGS="-arch x86_64" sudo gem install mysql2 --version '= 0.2.6' -- -with-mysql-config=/usr/local/mysql/bin/mysql_config

Я попробовал это, не работает.

Включение / usr / local / mysql / bin в $PATH также не помогает.

Код ошибки:

    Installing mysql2 (0.3.2) with native extensions /Users/administrator/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:533:in `rescue in block in build_extensions': ERROR: Failed to build gem native extension. (Gem::Installer::ExtensionBuildError)

        /Users/administrator/.rvm/rubies/ruby-1.9.2-p180/bin/ruby extconf.rb 
checking for rb_thread_blocking_region()... yes
checking for mysql.h... no
checking for mysql/mysql.h... no
-----
mysql.h is missing.  please check your installation of mysql and try again.
-----
*** 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
    --without-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/administrator/.rvm/rubies/ruby-1.9.2-p180/bin/ruby
    --with-mysql-config
    --without-mysql-config


Gem files will remain installed in /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.3.2 for inspection.
Results logged to /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.3.2/ext/mysql2/gem_make.out
    from /Users/administrator/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:511:in `block in build_extensions'
    from /Users/administrator/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:486:in `each'
    from /Users/administrator/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:486:in `build_extensions'
    from /Users/administrator/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:159:in `install'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/source.rb:96:in `install'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/installer.rb:55:in `block in run'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/spec_set.rb:12:in `block in each'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/spec_set.rb:12:in `each'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/spec_set.rb:12:in `each'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/installer.rb:44:in `run'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/installer.rb:8:in `install'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/cli.rb:225:in `install'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/vendor/thor/task.rb:22:in `run'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/vendor/thor/invocation.rb:118:in `invoke_task'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/vendor/thor.rb:246:in `dispatch'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/lib/bundler/vendor/thor/base.rb:389:in `start'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/gems/bundler-1.0.12/bin/bundle:13:in `<top (required)>'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/bin/bundle:19:in `load'
    from /Users/administrator/.rvm/gems/ruby-1.9.2-p180/bin/bundle:19:in `<main>'

13 ответов

Решение

Я перепробовал все решения, размещенные здесь, но мне не повезло. Я пару раз переустанавливал mysql с homebrew и все равно не повезло. Затем я наткнулся на сообщение в блоге с решением.

Я редактировал файл mysql_config в /usr/local/Cellar/mysql/5.6.12/bin и убрал параметры W-компилятора -Wno-null-conversion а также -Wno-unused-private-fieldдля флагов и флагов.

Это решило проблему с gem install mysql2 а также bundle install

Ссылка: http://www.randomactsofsentience.com/2013/05/gem-install-mysql2-missing-mysqlh-on-os.html

Я установил пакет на репозиторий Redmine и получил то же сообщение об ошибке:

mysql.h отсутствует. пожалуйста, проверьте вашу установку MySQL и попробуйте снова.

Запуск Fedora 16 64 бит, все что я сделал, это установил mysql-devel (пакет разработки) из дистрибутива rpm и проблема была решена!

Так что я думаю, что вы могли бы просто

yum install mysql-devel

или apt-get пропавшего пакета devel.

Для людей, которые не использовали brew для установки mysql и использования mysql 5.6 и выше:

согласно этому ответу

вам нужно отредактировать mysql_config который был помещен в моем случае здесь: /usr/local/mysql-5.6.12-osx10.7-x86_64/bin

и изменить cflags а также cxxflags чтобы:

cflags="-I$pkgincludedir  -Wall -Os -g -fno-strict-aliasing -DDBUG_OFF " #note: end space!
cxxflags="-I$pkgincludedir  -Wall -Os -g -fno-strict-aliasing -DDBUG_OFF " #note: end space!

после этой манипуляции

$ gem install mysql2 -v '0.3.13'

идет без нареканий

Ок, ребята, для меня решение было:

$ sudo brew install mysql

$ sudo env ARCHFLAGS="-arch i386" gem install mysql -- \
  --with-mysql-dir=/usr/local/mysql --with-mysql-lib=/usr/local/mysql/lib \
  --with-mysql-include=/usr/local/mysql/include

источник: http://wonko.com/post/how-to-install-the-mysqlruby-gem-on-mac-os-x-leopard

ИЛИ ЖЕ:

$sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- \
  --with-mysql-dir=/usr/local/mysql --with-mysql-lib=/usr/local/mysql/lib \
  --with-mysql-include=/usr/local/mysql/include

Если ваша версия mysql 64Bits

После этого у меня было много проблем, потому что, если я хочу создать базу данных:

$: bundle exec rake db:reset

я получаю эту ошибку:

dyld: lazy symbol binding failed: Symbol not found: _mysql_init
  Referenced from: /Users/workdreamer/Sites/cavortify/implementation/cavortify/mysql/ruby/1.8/gems/mysql-2.8.1/lib/mysql_api.bundle
  Expected in: flat namespace

dyld: Symbol not found: _mysql_init
  Referenced from: /Users/workdreamer/Sites/cavortify/implementation/cavortify/mysql/ruby/1.8/gems/mysql-2.8.1/lib/mysql_api.bundle
  Expected in: flat namespace

Решение: в ваш gemfile добавьте: gem "ruby-mysql"

Хорошо, полтора дня, чтобы найти решение.

Хорошего дня!

Этот метод для Rails 3.1.0 (и, надеюсь, работает) на 64-битной машине. Я использовал на Ruby-1.9.2-p180.

Этот блог ответил на это: http://www.tatvartha.com/2010/10/installing-mysql-gem-with-bundler-on-snow-leopard/

В основном, метод выше: $ sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- -with-mysql-config=/usr/local/mysql/bin/mysql_config

может работать, но без упаковщика.

Чтобы сделать это с помощью bundler, сначала необходимо запустить это на терминале:

bundle config build.mysql2 --with-mysql-config=/usr/local/mysql/bin/mysql_config

Обратите внимание: "mysql2", а не "mysql", как показано в этом блоге.

Это добавляет конфигурацию в файл ~/.bundle/config

Затем добавьте это в ~/.bash_profile:

export ARCHFLAGS="-arch x86_64"

Это то же самое, что сказать bundler запустить команду в верхней части этого поста.

Это работало для меня на моем Mac OSX Lion:

sudo env ARCHFLAGS="-I/usr/local/include/mysql/mysql  -pipe -fPIC    -D_P1003_1B_VISIBLE -DSIGNAL_WITH_VIO_CLOSE -DSIGNALS_DONT_BREAK_READ -DIGNORE_SIGHUP_SIGQUIT  -DDONT_DECLARE_CXA_PURE_VIRTUAL" gem install mysql -- --with-mysql-dir=/usr/local/mysql --with-mysql-lib=/usr/local/lib/mysql/mysql --with-mysql-include=/usr/local/include/mysql/mysql --with-mysql-config=/usr/local/bin/mysql_config

Этот блог ответил на это.

Единственный способ заставить это работать - установить x64-версию mysql. Я просто использовал.dmg, расположенный здесь http://dev.mysql.com/downloads/mysql/ и он работал как шарм. Хотел бы я вернуть 4 часа назад, чтобы понять это.

Для Мариадб:

sudo apt-get install libmariadbclient18 libmariadbclient-dev

затем

gem install mysql2

может быть успешно установлен.

Моя проблема была результатом первой установки MySql через загружаемый бинарный файл. Первоначально он был установлен в версии 5.5.28. Затем я попытался установить с помощью доморощенного. Заваривать установленную версию 5.6.x. ОДНАКО в процессе установки с помощью homebrew, символическая ссылка для /usr/local/mysql все еще указывала на 5.5.28.

Обновите вашу символическую ссылку, чтобы какая-либо версия была установлена ​​через homebrew.

например: /usr/local/mysql -> /usr/local/Cellar/mysql/5.6.13/

Это может быть только частью решения.

TL;DR:


Я был в тупике из-за этой проблемы почти 2 дня и переустановил xcode и так много раз.

Изначально я установил с помощью brew, но bundle install команда продолжала давать сбой, потому что не могла найти mysqlмонтаж. Вывод ошибки ниже:

      libmysqlclient is missing. You may need to 'brew install mysql' or 'port install mysql', and try again.

Однако использование ответа @Kevin Boedigheimer помогло решить проблему, т.е. я связал установленный mysql@5.6 к /usr/local/mysql

      sudo ln -s /usr/local/opt/mysql@5.6 /usr/local/mysql

NB: если ваш каталог mysql находится где-то еще, вы можете найти его, используя:

      find / -name 'mysql*5.6' 2&> /dev/null

# '2&> /dev/null' ensures you have just the output you need

Для тех, кто на Fedora 21, и вы уже установили mysql-devel:

yum install redhat-rpm-config

решил проблему для меня. смотрите: redhat docs

Размещать это везде, где я могу - надеюсь, это поможет кому-то и сэкономит им много времени.

Я копался в интернете за 2 дня и переполнении стека, и только когда я нашел эту ссылку, а затем начал работать с этим билетом для mysql2, я действительно решил проблему.

С моей установкой (как объяснено в билете) переключатели компилятора поля -Wno-null-преобразование -Wno-unused-private-field сломались бы и дали мне ошибку, которая была не совсем правильной, которая была:

mysql.h is missing. please check your installation of mysql and try again

Убедитесь, что gcc установлен. Если это не так, вы получите то же самое сообщение об ошибке.

Вы можете проверить файл результатов / журнала, в котором он упоминает, чтобы узнать больше о причине.

Другие вопросы по тегам