Установите gem mysql2 на macOS Sierra
Я пытаюсь установить mysql2 gem (0.4.5) на macOS Sierra (10.12.1) и получить ошибку. У меня нет локального сервера mysql, он удален.
Вот журнал ошибок:
checking for ruby/thread.h... yes
checking for rb_thread_call_without_gvl() in ruby/thread.h... yes
checking for rb_thread_blocking_region()... no
checking for rb_wait_for_single_fd()... yes
checking for rb_hash_dup()... yes
checking for rb_intern3()... yes
-----
Using mysql_config at /usr/local/bin/mysql_config
-----
checking for mysql.h... yes
checking for errmsg.h... yes
checking for mysqld_error.h... yes
-----
Don't know how to set rpath on your system, if MySQL libraries are not in path mysql2 may not load
-----
-----
Setting libpath to /usr/local/Cellar/mysql-connector-c/6.1.9/lib
-----
creating Makefile
To see why this extension failed to compile, please check the mkmf.log which can be found here:
/Users/user/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/extensions/x86_64-darwin-16/2.3.0-static/mysql2-0.4.4/mkmf.log
current directory: /Users/user/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/mysql2-0.4.4/ext/mysql2
make "DESTDIR=" clean
current directory: /Users/user/.rbenv/versions/2.3.4/lib/ruby/gems/2.3.0/gems/mysql2-0.4.4/ext/mysql2
make "DESTDIR="
compiling client.c
compiling infile.c
compiling mysql2_ext.c
compiling result.c
compiling statement.c
linking shared-object mysql2/mysql2.bundle
ld: library not found for -l-lpthread
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [mysql2.bundle] Error 1
make failed, exit code 2
Кто-нибудь сталкивался с подобной ошибкой?
Ответы
Ответ 1
Fix:
Отредактируйте /usr/local/Cellar/mysql-connector-c/6.1.10/bin/mysql_config
, найдите эту строку:
libs="$libs -l "
и изменить его на
libs="$libs -l mysqlclient "
Объяснение:
-L-Lpthread
Линкер не понимает опцию -L-Lpthread
. Два варианта линкера -L-L
зажаты друг против друга. Это потому, что имя библиотеки mysqlclient
отсутствует в созданном файле make.
Я столкнулся с этой проблемой при попытке собрать собственные расширения для mysql2
на Ruby 2.4.1 с помощью mysql-connector-c
из Home Brew.
Это было на MacOS 10.12.5.
Сгенерированная переменная LIBS
должна выглядеть примерно так:
LIBS = $(LIBRUBYARG_SHARED) -L/usr/local/Cellar/mysql-connector-c/6.1.10/lib -L mysqlclient -Lpthread -Ldl -Lobjc
Похоже, переменная раскрывается из файла /usr/local/Cellar/mysql-connector-c/6.1.10/bin/mysql_config
libs
в файле mysql_config
должна содержать:
libs="$libs -L mysqlclient "
вместо
libs="$libs -L "
Может быть, тоже неправильная переменная embedded_libs
?
mysql-connector-c
lib устанавливает и собирает нормально через Home Brew
просто кажется, что файл mysql_config
неверен или сгенерирован неправильно.
Не уверен причина проблемы. Возможно Home Brew
, mysql-connector-c
, процесс сборки gem mysql2, пользовательская среда?
Ответ 2
Проблема в том, что вам не хватает библиотеки, поскольку сообщение об ошибке указывает
ld: библиотека не найдена для -l-lpthread
EDIT: Кажется, что есть другие ошибки, которые могут быть исправлены с помощью приведенных ниже инструкций, а именно:
ld: библиотека не найдена для -lssl
Я предполагаю, что вы еще не установили xcode, а затем установили еще несколько библиотек. Обязательно установите xcode через официальный магазин приложений.
Возможно, потребуется снова установить инструменты командной строки (даже если вы установили xcode и просто обновили его в какой-то момент).
xcode-select --install
Дайте мне знать, если это поможет!
Ответ 3
Я не уверен, что проблема в том, что формула mysql-connector-c нарушена в Homebrew, или если проблемы лежат в камне mysql2, но вы можете обойти проблему, установив формулу mysql.
Даже если вам не нужен локальный сервер MySQL для разработки, версия mysql_config
из формулы mysql корректно возвращает список библиотек, необходимых для связывания родного расширения gem.
Если у вас уже установлен mysql-connector-c:
brew unlink mysql-connector-c
# OR
brew uninstall mysql-connector-c
Установите формулу mysql:
brew install mysql
Ответ 4
Как заставить его работать на MacOS Mojave.
Убедитесь, что openssl
установлен на Mac через Homebrew:
brew install openssl
Затем установите mysql2
gem следующим образом:
gem install mysql2 -v 'x.x.x' -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include
где xxx - указанная версия гема mysql2.