ไม่ได้โหลดไลบรารี: ข้อผิดพลาด libmysqlclient.16.dylib เมื่อพยายามเรียกใช้ 'เซิร์ฟเวอร์ราง' บน OS X 10.6 ด้วยอัญมณี mysql2


206

ฉันดิ้นรนกับสิ่งนี้มาระยะหนึ่งแล้ว

ฉันได้ติดตั้ง Rails 3, gem, mysql บนเครื่อง Snow Leopard ของฉันแล้ว ทุกอย่างเป็นไปด้วยดีจนกระทั่งฉันสร้างโครงการแรกและพยายามวิ่ง

rails server

เมื่อใช้งานนี้ฉันจะได้รับ:

jontybrook$ rails server
/Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle: dlopen(/Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.16.dylib (LoadError)
  Referenced from: /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle
  Reason: image not found - /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle
    from /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2.rb:7
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:64:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:64:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:62:in `each'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:62:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:51:in `each'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:51:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler.rb:112:in `require'
    from /Users/jontybrook/Dropbox/CODING/simple_cms/config/application.rb:7
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:28:in `require'
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:28
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:27:in `tap'
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:27
    from script/rails:6:in `require'
    from script/rails:6
jontybrook$ 

เท่าที่ฉันสามารถบอกได้ว่าปัญหาคืออัญมณี mysql2 MySQL ดูเหมือนว่าจะทำงานได้ดีและ Gemfile ของฉันอ้างอิง mysql2, ไฟล์ database.yml ของฉันก็โอเคเช่นกัน

ข้อผิดพลาดกล่าวถึง

Reason: image not found - /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

และยัง

jontybrook$ cd /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2
jontybrook$ ls
client.rb   em.rb       error.rb      mysql2.bundle result.rb

MySQL2.bundle อยู่ที่นั่น!

ถ้าฉันใช้ mysql gem เก่า WEBrick ก็ใช้ได้ดี แต่นั่นไม่เหมาะใช่ไหม?

ฉันพยายามทุกอย่าง google สามารถให้ฉัน! ความช่วยเหลือใด ๆ ที่ชื่นชมมาก

คำตอบ:


393

ฉันไม่สามารถหาคำตอบเหล่านี้ได้สำหรับฉัน แต่นี่เป็นคำสั่งที่ฉันใช้เพื่อทำให้มันใช้ได้สำหรับฉัน วิธีนี้คุณไม่จำเป็นต้องใช้ install_name_tool ทุกครั้งที่คุณอัพเดต mysql ของคุณ

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

11
นั่นคือวิธีที่ง่ายที่สุดและถูกต้องในการแก้ปัญหานั้น
Voldy

2
ขอบคุณสำหรับสิ่งนี้. คำตอบที่ทำเครื่องหมายไว้ด้านบนใช้ได้กับเว็บไซต์เดียวเท่านั้น แต่ได้ผลอย่างถาวร มันเป็น 'betta
fregas

12
สำหรับผู้ที่อยากรู้ว่าเกิดอะไรขึ้นคำสั่งนี้จะสร้างลิงค์สัญลักษณ์จากตำแหน่งที่สองไปยังตำแหน่งแรก เมื่ออัญมณีมองหาไลบรารีไคลเอนต์ MySQL ภายใต้/usr/libลิงก์นั้นจะแก้ไขไปยังตำแหน่งที่ติดตั้งจริง บน OS X มักจะอยู่ภายใต้/usr/local/mysql/libซึ่งเป็นที่ที่คำสั่งนี้เชื่อมโยงไปถึง หาก lib ของคุณติดตั้งในตำแหน่งอื่นคุณจะต้องปรับแต่งคำสั่งนี้ พิมพ์และใช้แทนผลการอาร์กิวเมนต์แรกหลังจากlocate libmysqlclient.18.dylib -s
Siobhán

1
@Sean D. เมื่อฉันเรียกใช้ค้นหา libmysqlclient.18.dylib ฉันได้รับผลลัพธ์นี้มีWARNING: The locate database (/var/db/locate.database) does not exist. To create the database, run the following command: sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist Please be aware that the database can take some time to generate; once the database has been created, this message will no longer appear.อะไรผิดปกติหรือไม่
GiH

1
@GiH คุณเพียงแค่ต้องเรียกใช้คำสั่งมันจะบอกคุณ ( sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist) ที่จะเริ่มกระบวนการสร้างดัชนีฮาร์ดไดรฟ์ของคุณซึ่งจะทำให้locateคำสั่งทำงานได้ในอนาคต ในกรณีส่วนใหญ่ฉันคิดว่าคุณไม่จำเป็นต้องทำเช่นนั้นและสามารถใช้คำสั่งที่ luvlss จัดเตรียมไว้ตามที่เป็น
Siobhán

93

ฉันได้แก้ไขสิ่งนี้ในที่สุด!

ฉันติดตั้ง Ruby และ Rails อีกครั้งภายใต้ RVM ฉันใช้ Ruby เวอร์ชั่น 1.9.2-p136

หลังจากติดตั้งใหม่ภายใต้ rvm ข้อผิดพลาดนี้ยังคงปรากฏอยู่

ในที่สุดคำสั่งเวทย์มนตร์ที่แก้ไขมันก็คือ:

sudo install_name_tool -change libmysqlclient.16.dylib /usr/local/mysql/lib/libmysqlclient.16.dylib ~/.rvm/gems/ruby-1.9.2-p136/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

หวังว่านี่จะช่วยคนอื่นได้!


1
สิ่งนี้มีการรีเซ็ตสิทธิ์ของ mysql และตอนนี้ฉันไม่สามารถเข้าสู่ระบบ ... แม้หลังจากทำการรีเซ็ตรหัสผ่านโดยใช้ไฟล์ตามที่อธิบายไว้ในเอกสาร mysql
Coderama

2
ขอบคุณสิ่งนี้ทำเพื่อฉัน และสำหรับคนอื่นที่มีปัญหาเดียวกันถ้าคุณใช้ rvm ให้ข้าม sudo มิฉะนั้นการอนุญาตอาจเปลี่ยนไป
DanneManne

2
คำสั่งเวทย์มนตร์ทำงานได้แม้ว่าคุณจะไม่ได้ใช้ RVM - เพียงแค่เปลี่ยนอาร์กิวเมนต์สุดท้ายเพื่อชี้ไปยังmysql2-0.2.6/lib/mysql2/mysql2.bundleตำแหน่งที่ติดตั้งอัญมณีของคุณ
โทเบียสโคเฮน

2
ขอบคุณมาก. คุณคิดออกยังไงบนโลกใบนี้?
Derek

7
ขอบคุณ! ฉันต้องการคำสั่งที่แตกต่างออกไปเล็กน้อยสำหรับ Mac OS X Lion ที่ใช้ RVM 1.6.4 กับ Ruby 1.9.2-p180, mysql2 gem 0.3.10: sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.3.10/lib/mysql2/mysql2.bundle
Randy Eppinger

88

การแก้ไขนี้ทำงานได้ดีมากสำหรับฉัน:

เพิ่มสิ่งต่อไปนี้ใน ~ / .profile ของคุณ

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH

http://www.rickwargo.com/2010/12/16/installing-mysql-5-5-on-os-x-10-6-snow-leopard-and-rails-3/


1
ขอบคุณมาก. สิ่งนี้ใช้ได้สำหรับฉัน (Mac os x 10.6.6i, ruby ​​1.9.3p327) โดยใช้ RVM
datnt

ได้รับการยืนยัน นั่นคือทั้งหมดที่ฉันต้องเพิ่มใน osx Maverick 10.9.1
Artur79

40

สำหรับฉันนี่เป็นเพียงเพราะฉันได้อัพเกรด mysql แต่ไม่ได้อัปเดตอัญมณี mysql2 - การติดตั้งอัญมณีอีกครั้งจะแก้ไขมัน ...

gem pristine mysql2


นี่ควรเป็นคำตอบที่เลือก
El Guapo

26

ฉันมีปัญหาเดียวกัน ดูเหมือนว่าไม่สามารถค้นหาไลบรารี libmysqlclient การแก้ไขชั่วคราวที่ใช้งานได้สำหรับฉันมีดังต่อไปนี้:

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/

ฉันไม่แน่ใจว่าการกำหนดค่ากำลังระบุพา ธ โหลดหรืออะไรที่ตั้งค่าไว้ แต่การติดตั้ง mysql ของฉันไม่ปรากฏว่าอยู่ในนั้น ฉันจะโพสต์อีกครั้งหากฉันพบทางออกที่ถาวรกว่า

แก้ไข: จริงๆแล้วการแก้ไขนี้ปรากฏขึ้นเพื่อแก้ไขปัญหาได้อย่างแม่นยำมากขึ้น


24

เพิ่มด้านล่างของคุณ~/.bash_profile:

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH

สิ่งนี้ใช้ได้สำหรับฉัน


ใช่ทำงานบน 1.9.3-p448 น่าเสียดายที่มันไม่ใช่คำตอบที่ยอมรับ
andreimarinescu

17

ในการอัปเดต OSX El Capitan เมื่อคุณทำสิ่งนี้:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

มันจะพ่นข้อผิดพลาดเช่น

ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted

ดังนั้นเพื่อหลีกเลี่ยงสิ่งนี้สิ่งที่คุณสามารถทำได้คือค้นหาก่อน libmysqlclient.18.dylibโดยใช้คำสั่งก่อน

User$ locate libmysqlclient.18.dylib

ในกรณีของฉันมันกลับมา /usr/local/mysql-5.5.24-osx10.5-x86_64/lib/libmysqlclient.18.dylib

ดังนั้นแทนที่จะusr/lib/สร้าง symlink usr/local/lib/แบบนี้:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib

รายละเอียดเพิ่มเติม: https://forums.developer.apple.com/thread/7935


1
ใน El Capitan สำหรับฉันทุกอย่างที่คุณทำคือบรรทัดสุดท้าย:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Justin

ดีใจที่มันช่วยใครซักคน : D
Sony Mathew

นี่คือคำตอบที่ถูกต้องสำหรับ elcapitan ลิงก์เป้าหมายของคุณควรอยู่ใน /usr/local/libโฟลเดอร์
Arnold Roa

13

บรรทัดต่อไปนี้เหมาะสำหรับฉัน ฉันใช้ mac 10.7.2

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib


1
อันนี้เป็นสิ่งที่แก้ไขปัญหาของฉัน ขอบคุณ!
Justin Bozonier

11

เพิ่งพบปัญหานี้ สิ่งที่ฉันต้องทำก็คือถอนการติดตั้ง mysql2 gem และติดตั้งใหม่ หวังว่านี่จะใช้ได้กับคนอื่น ๆ


1
บนเครื่องของฉันใช้ Mavericks ฉันได้ลบ mysql2 gem ทุกเวอร์ชันด้วย gem ถอนการติดตั้ง mysql2 และตอบรับAll versionsทันที ฉันวิ่งชงการอัพเกรด mysql แล้วติดตั้ง gem mysql2
Martin Streicher

4

นี่คือวิธีการทำงานสำหรับฉัน:

ฉันวิ่งตามคำสั่งด้านล่าง
sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib ~ / .rvm / gems / ruby-1.9.2-p180 / gems / mysql2-0.2.7 /lib/mysql2/mysql2.bundle

สภาพแวดล้อมของฉัน:
$ rails -v Rails 3.0.6

$ mysql -
เวอร์ชัน mysql Ver 14.14 Distrib 5.5.11 สำหรับ osx10.6 (i386) โดยใช้ readline 5.1

$ ruby ​​-v
ruby 1.9.2p180 (2011-02-18 แก้ไข 30909) [x86_64-darwin10.7.0]

หวังว่านี่จะช่วยใครซักคน


3

ขอบคุณ Ogapo! การส่งออกชื่อแทนนั้นใช้งานได้สำหรับฉันแล้วฉันไปตามลิงก์และในกรณีของฉัน mysql2.bundle ก็อยู่ใน /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2/mysql2.bundle ฉันปรับ install_name_tool เพื่อแก้ไขบันเดิลนั้นแทนที่จะเป็นหนึ่งใน ~ / .rvm และทำให้มันทำงานได้อย่างที่ควรจะเป็น

ดังนั้นตอนนี้:

   $ otool -L /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle 
    /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle:
        /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/libruby.1.dylib (compatibility version 1.8.0, current version 1.8.7)
        /usr/local/mysql/lib/libmysqlclient.16.dylib (compatibility version 16.0.0, current version 16.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1)

3

สวัสดีมันใช้งานได้สำหรับฉันจากลิงก์ที่แนะนำจาก Fredy Andersen

sudo install_name_tool -change libmysqlclient.16.dylib /usr/local/mysql /lib/libmysqlclient.16.dylib /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

เพิ่งจะเปลี่ยนเป็น mysql เวอร์ชันของฉันในคำสั่งขอบคุณ


3

ฉันแก้ไขปัญหานี้ด้วยการลบ gemset ของฉันสำหรับโครงการปัจจุบันของฉันและสร้างมันขึ้นมาใหม่และติดตั้งชุดบันเดิลซ้ำ ฉันคิดว่าฉันเกิดจากการติดตั้ง mysql เวอร์ชั่นใหม่


3

ฉันมีปัญหานี้เมื่อทำงานกับ Django ฉันใช้brewในการติดตั้งโปรแกรม Open Source จำนวนมากและฉันต้องทำสิ่งต่อไปนี้ตั้งแต่ฉันbrewติดตั้งmysql:

sudo ln -s /usr/local/Cellar/mysql/5.5.20/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

อย่าลืมแทนที่ไลบรารี่เวอร์ชั่นของคุณ!



2

Jonty ฉันกำลังดิ้นรนกับเรื่องนี้เช่นกัน

ฉันคิดว่ามีเงื่อนงำในที่นี่:

otool -L /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

/Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle:
    /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/libruby.1.dylib (compatibility version 1.8.0, current version 1.8.7)
    libmysqlclient.16.dylib (compatibility version 16.0.0, current version 16.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1)

ขอให้สังเกตเส้นทางของ dylib เอ่อค่อนข้างสั้นใช่มั้ย

ฉันพยายามที่จะคิดออกว่าคำแนะนำในการติดตั้ง gem จะทิ้งเส้นทาง dylib ไว้ที่ไหน แต่มันช้าไปเพราะฉันไม่เคยสร้าง gem ด้วยตัวเอง

ฉันจะโพสต์มากขึ้นหากฉันพบมากขึ้น!


2

ฉันมีปัญหาเดียวกันนี้เมื่อไม่กี่วันที่ผ่านมา ในที่สุดฉันก็สามารถแก้ไขมันได้ ฉันไม่แน่ใจเหมือนกัน แต่ฉันจะบอกคุณว่าฉันทำอะไรต่อไป บางทีมันอาจช่วยคุณได้

ฉันเริ่มต้นด้วยการดาวน์โหลด RVM หากคุณยังไม่ได้ใช้งานฉันขอแนะนำให้ทำเช่นนั้น โดยทั่วไปจะสร้าง sandbox สำหรับการติดตั้ง Ruby, RoR และ RubyGems แยกต่างหาก ในความเป็นจริงคุณสามารถติดตั้งหลาย ๆ เครื่องพร้อมกันและสลับไปยังอีกเครื่องหนึ่งได้ทันที มันทำงานเหมือนจับใจ

ทำไมถึงมีประโยชน์ เพราะคุณไม่ควรยุ่งกับการติดตั้งทับทิมเริ่มต้นใน OS X ระบบขึ้นอยู่กับมัน เป็นการดีที่สุดที่จะปล่อยให้การติดตั้ง Ruby และ RoR เริ่มต้นเพียงอย่างเดียวและสร้างใหม่โดยใช้ RVM ที่คุณสามารถใช้สำหรับการพัฒนาของคุณเอง

เมื่อฉันสร้างการติดตั้ง Ruby แยกต่างหากฉันเพิ่งติดตั้ง RoR, RubyGems และ mysql และใช้งานได้ สำหรับขั้นตอนที่แน่นอนที่ฉันทำดูคำถามของฉัน: การติดตั้ง Rails, MySQL, ฯลฯ ทุกอย่างผิดพลาด

อีกครั้ง: ฉันไม่แน่ใจว่าสิ่งนี้จะช่วยแก้ปัญหาของคุณได้ แต่แน่นอนว่ามันเป็นการหลอกลวงสำหรับฉันและในกรณีใดก็ตามที่ใช้ RVM นั้นเป็นสิ่งที่แนะนำให้ใช้


2

ฉันยังพบว่าด้วยวิธีแก้ไขปัญหาด้านบนมันไม่ทำงาน (ตัวอย่าง) กับปลั๊กอิน Rails สำหรับ TextMate ฉันพบข้อผิดพลาดที่คล้ายกัน (เมื่อดึงสคีมาฐานข้อมูล)

ดังนั้นสิ่งที่เป็นคือเปิด terminal:

cd /usr/local/lib
sudo ln -s ../mysql-5.5.8-osx10.6-x86_64/lib/libmysqlclient.16.dylib .

แทนที่mysql-5.5.8-osx10.6-x86_64ด้วยพา ธ ของคุณเอง (หรือ mysql)

สิ่งนี้ทำให้การเชื่อมโยงสัญลักษณ์ไปยัง lib ตอนนี้ทางรถไฟทำงานจากบรรทัดคำสั่งรวมถึงปลั๊กอิน TextMate เช่นruby-on-rails-tmbundleทับทิมบนราง-tmbundle

เพื่อความชัดเจน: สิ่งนี้จะแก้ไขข้อผิดพลาดที่คุณได้รับเมื่อเริ่มต้นเซิร์ฟเวอร์ทางรถไฟ


2

สิ่งนี้มักจะเกิดขึ้นเมื่อคุณอัพเกรด mysql อัญมณี mysql2 ที่ติดตั้งซึ่งสร้างขึ้นบน mysql libs เก่าไม่สามารถทำงานกับ libs ใหม่ได้ เพียงแค่ต้องติดตั้งใหม่

mysql2 gem uninstall mysql2ถอนการติดตั้งด้วย จากนั้นติดตั้งด้วยgem install mysql2


1

ฉันแก้ไขมันด้วยการสร้างไฟล์. rmmrc ในโฟลเดอร์โปรเจ็กต์ของฉัน:

rvm use <yourrubie>

จากนั้นเข้าสู่เส้นทางโครงการของฉัน

cd ~/myprojectpath

จากนั้นฉันก็วิ่ง

bundle install

1

คำสั่งของ luvlss รุ่นของฉัน:

Mac OSX 10.10.5

MySQL 5.6.27

ผู้โดยสาร 5.0.21

sudo ln -s /usr/local/mysql-5.6.27-osx10.8-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

หากคุณพยายามเชื่อมโยงที่แตกต่างกันอย่างที่ฉันเคยทำให้ทำความสะอาดด้วย:

sudo unlink /usr/lib/libmysqlclient.18.dylib


1

เปิดTerminalและเรียกใช้สิ่งต่อไปนี้:

export PATH=$PATH:/usr/local/mysql/bin

มันควรจะทำงาน


1
มันทำงานได้ดีขอบคุณ !!! ฉันมีปัญหาในการทำให้ Django ทำงานบน Visual Studio Code ได้รับข้อผิดพลาดไม่ว่าฉันจะติดตั้ง mysqlclient บน virtualenv
Irshu

0

หากคุณใช้ OSX และติดตั้ง mysql โดยใช้ brew คุณสามารถ:

brew link mysql

หากคุณกำลังมีปัญหากับรุ่น (ฉันมี mysql 5.7 ทำงานในขณะที่อัญมณีของฉันต้องการ 5.6.25) คุณสามารถ

brew unlink mysql
brew switch mysql 5.6.25

0

สำหรับฉันฉันต้องถอนการติดตั้ง mysql ด้วยตนเอง

brew uninstall mysql
rm -rf /usr/local/var/mysql
brew install mysql
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.