Установите 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.