Помилка при спробі встановити додаток із коштовним кодом mysql2


84

Я намагаюся встановити програму з відкритим кодом rails 3.2.21, яка використовує mysql2самоцвіт, але коли я намагаюся запустити bundleкомманта, я отримую таку помилку:

Fetching: mysql2-0.3.18.gem (100%)
Building native extensions.  This could take a while...
p
ERROR:  Error installing mysql2:
    ERROR: Failed to build gem native extension.

    /Users/my_username/.rvm/rubies/ruby-2.1.2/bin/ruby -r ./siteconf20150614-72129-orqsb7.rb extconf.rb
checking for ruby/thread.h... yes
checking for rb_thread_call_without_gvl() in ruby/thread.h... yes
checking for rb_thread_blocking_region()... yes
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/5.6.25/lib
-----
creating Makefile

make "DESTDIR=" clean

make "DESTDIR="
compiling client.c
compiling infile.c
compiling mysql2_ext.c
compiling result.c
linking shared-object mysql2/mysql2.bundle
ld: warning: directory not found for option '-L/Users/travis/.sm/pkg/active/lib'
ld: library not found for -lssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [mysql2.bundle] Error 1

make failed, exit code 2

Gem files will remain installed in /Users/my_username/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/gems/mysql2-0.3.18 for inspection.
Results logged to /Users/my_username/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/extensions/x86

Я спробував видалити кожну версію, яку mysqlя встановив за допомогою homebrew, і перевстановити їх, наприклад:

brew uninstall --force mysql && brew install mysql

Потім запустіть:

sudo gem install mysql2

Як пропонується низкою подібних запитань, заданих тут, але це все одно призводить до тієї ж помилки, що і вище.

Будь ласка, хтось може запропонувати вказівки, як це зробити?


спробуйте запустити "заварювання лікаря" і перевірте, чи немає помилок. Якщо так, дотримуйтесь інструкцій і повторіть спробу.
michniewicz

Ви встановили залежності gem? github.com/brianmario/mysql2#general-instructions
lcguida

@ValAsensio, я щиро з вами там не згоден, я думаю, вам слід завжди намагатися використовувати свій виробничий db у розробці, якщо це можливо. Я ніколи не використовую sqlite у розробці, а також ніхто, з ким я працюю.
niels

@niels. Так. Я погоджуюсь із цим: "Я думаю, вам завжди слід намагатися використовувати свій виробничий db у розробці". Цей мій стародавній коментар був марним. Я видалив його.
Elvn,

Відповіді:


55

У журналі помилок написано:

ld: library not found for -lssl

Отже, вам потрібно встановити libssl:

brew install openssl

Як зазначалося в коментарях, можливо, буде необхідність експортувати шлях до бібліотеки.

export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl/lib/

27
Це було не достатньо, один потрібно експортувати його пізніше , як це:export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl/lib/
Gilg Йому

export LIBRARY_PATH = $ LIBRARY_PATH: / usr / local / opt / openssl / lib / `Працює у мене після тривалої спроби. Дякую!!
Абхі

161

Для тих, хто все ще відчуває проблему:

Коли ви встановлюєте openssl за допомогою brew, ви повинні отримати таке повідомлення:

Apple припинила використання OpenSSL на користь власної TLS та криптотеки

Як правило, для вас це не має наслідків. Якщо ви створюєте власне програмне забезпечення, і воно вимагає цієї формули, вам потрібно додати до змінних збірки:

LDFLAGS: -L / usr / local / opt / openssl / lib
CPPFLAGS: -I / usr / local / opt / openssl / include
PKG_CONFIG_PATH: / usr / local / opt / openssl / lib / pkgconfig

Ви можете встановити ці прапори збірки (для локальної програми), виконавши наступне:

bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include"

Це спрацювало для мене.

Для отримання додаткової інформації дивіться документацію постачальника .


79
Якщо ви просто хочете скористатися gem install, працює наступне: gem install mysql2 -v '0.3.21' -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include
niels

^^^ @niels , який повинен бути відповідь ... Алессандро не працює на Sierra ( «Попередження: Відмова посилання: Open SSL ...» -> що - то робити із застарілою системою OpenSSL)
the12

2
Рішення @ the12 niels для gem install, моє для bundle install. Яка проблема у вас виникає, чи можете ви опублікувати помилку? Рішення, яке я опублікував, досі працює для мене.
Алессандро Берарді,

1
Я почав із спроби bundle installзробити репо, яке залежить від mysql. Рішення @ AlessandroBerardi для мене не спрацювало; @niels 'зробив. : /
vergenzt

3
--with-cppflags, здається, зламався на останній OSX. Я вважаю, що це можна опустити. bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib"
Xavier Shay

36

Рішенням для мене було встановити інструменти командного рядка Xcode.

Нещодавно я оновив Xcode через Mac App Store, і кожного разу, коли я це роблю, я виявляв, що мені доведеться перевстановити Інструменти командного рядка знову.

xcode-select --install

34

Спробуйте це:

gem install mysql2 -v '0.5.2' -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include

(Оновіть версію відповідно)


1
Враховуючи те, що бібліотеку SSL не було знайдено, це правильний підхід і для мене справно працював.
TehJabbit

2
Перша установка brew install opensslпотім gem install mysql2 -v '0.4.10' -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include спрацювала для мене, дякую!
Touseef Murtaza

1
@TouseefMurtaza, ваша відповідь спрацювала на мене - дякую!
Джаред,

👋 Шановне майбутнє я. Тепер ви прочитали цю відповідь двічі. Це вирішено для вашої ситуації! А тепер ідіть і обміняйте свій час на код, а ваш код на гроші.
DaveWoodall.com

28

На основі розв’язання тут

brew install openssl

export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl/lib/

вирішив проблему.


1
exportдійсно допомагає. навіть при існуючому openssl шлях відсутній.
Якоб Убайді

10

Дякую @mudasobwa за те, що вказав мені у правильному напрямку. Виявляється, помилку спричинив незв’язаний файл openssl, тому виконуємо:

brew reinstall openssl && brew link openssl --force 

Вирішив проблему. Я знайшов тут рішення: OpenSSL, RVM, Brew, суперечлива помилка


3

Поєднання команд це мене вирішило. Я на Мохаве.

brew reinstall openssl && brew link openssl --force

і потім

gem install mysql2 -v '0.4.10' -- \
  --with-ldflags=-L/usr/local/opt/openssl/lib \
  --with-cppflags=-I/usr/local/opt/openssl/include


2

Після оновлення Homebrew (openssl@1.1) з'являється новий шлях до бібліотек, тому можна використовувати:

bundle config build.mysql2 --with-opt-dir=$(brew --prefix openssl)
bundle install

Це виправить ld: library not found for -lssl error


1

Здається, ви пропускаєте основні файли, необхідні для створення mysql2gem

sudo apt-get install libsqlite3-dev libmysqlclient-dev -y

libsqlite3-dev не є обов’язковим, але встановіть його, оскільки це БД рейок за замовчуванням.


-1

Я виявив, що мені довелося використовувати --with-opt-dir=/usr/local/opt.

Зокрема, я додав у свій ~/.bundle/configфайл наступне :

BUNDLE_BUILD__MYSQL2: "--with-opt-dir=/usr/local/opt"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.