dyld: ไม่ได้โหลดไลบรารี: /usr/local/lib/libjpeg.8.dylib - homebrew php


109

PHP ไม่ทำงานสำหรับฉันเนื่องจากฉันพบปัญหา libpng นี้ดังนั้นฉันจึงติดตั้งเวอร์ชันใหม่ด้วย Homebrew

อย่างไรก็ตามฉันได้รับข้อผิดพลาดที่คล้ายกันlibjpegในครั้งนี้:

$ php -v
dyld: Library not loaded: /usr/local/lib/libjpeg.8.dylib
  Referenced from: /usr/local/bin/php
  Reason: image not found
Trace/BPT trap: 5

ข้อเสนอแนะใด ๆ ?


ผลลัพธ์ของbrew doctorและbrew listคืออะไร?
— IKavanagh

คำตอบ:


250

ตามที่เสนอโดย @ jirson-tavera ในปัญหาhomebrew-php repoสิ่งนี้สามารถแก้ไขได้โดยไม่ต้องลบล้างการติดตั้งเบียร์ของคุณ:

wget -c http://www.ijg.org/files/jpegsrc.v8d.tar.gz
tar xzf jpegsrc.v8d.tar.gz
cd jpeg-8d
./configure
make
cp ./.libs/libjpeg.8.dylib /usr/local/opt/jpeg/lib

4
นอกจากอาจจะเพิ่มเส้นคี่เพื่อทำความสะอาดนี่ควรเป็นคำตอบที่ยอมรับได้ ...
— Koen Betsens

ทำงานให้ฉันด้วย ขอบคุณ.
— Adrian Lynch

ทำงานให้ฉันเช่นกัน ไชโย
— Eduardo Leggiero

19
พิจารณาทำวิธีที่ถูกต้องแทน
— 60

ขอบคุณผลงานฉันได้รับปัญหาเดียวกันหลังจากติดตั้ง rabbitmq
— Omar Makled

167

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

ปัญหา

ปัญหาคือjpegสูตรของ Homebrew ได้รับการอัปเกรดเป็น v9 แต่สูตร PHP "บรรจุขวด" ที่มีอยู่ยังคงสร้างและเชื่อมโยงกับเวอร์ชันก่อนหน้าคือ v8 ซึ่งไม่มีอยู่ในระบบของคุณอีกต่อไป

คุณมีทางเลือกในการแก้ไขปัญหาเล็กน้อย

1. รวบรวมphpxxสูตรใหม่จากแหล่งที่มา(แนะนำเป็นอย่างยิ่ง)

ถอนการติดตั้งสูตร php ของคุณและสร้างใหม่จากแหล่งที่มาแทนที่จะใช้เวอร์ชันบรรจุขวด ด้วยวิธีนี้ php จะใช้และเชื่อมโยงกับเวอร์ชันที่ติดตั้งในปัจจุบันของjpeg. สมมติว่าคุณกำลังจัดการกับphp71:

brew reinstall php71 --build-from-source

2. ดาวน์เกรดjpegสูตรให้ถูกวิธี(แนะนำให้ทำการคอมไพล์ซ้ำด้วยตนเอง)

หากคุณยังไม่ได้เรียกใช้แสดงbrew cleanupว่าคุณมีjpegเวอร์ชันก่อนหน้าอยู่แล้วในห้องเก็บเบียร์ของคุณให้เปลี่ยนไปใช้:

brew switch jpeg 8d

หากคุณได้รับjpeg does not have a version "8d" in the Cellar.ข้อผิดพลาดคุณต้องกู้คืนก่อนโดยการคืนค่าประวัติ:

cd $(brew --prefix)/Homebrew/Library/Taps/homebrew/homebrew-core
git checkout b231469
HOMEBREW_NO_AUTO_UPDATE=1 brew install jpeg
git checkout master

brew switch jpeg 8d

คุณสามารถค้นหาคอมมิตแฮชได้โดยใช้brew log jpegและดำเนินการผ่านข้อความคอมมิต

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

3. ดาวน์เกรดjpegโดยการคอมไพล์ใหม่ด้วยตนเอง(ไม่แนะนำ)

ดึงแหล่งที่มารวบรวมและเขียนทับเวอร์ชันของเบียร์ อ้างถึงคำตอบของเดนิสสำหรับรายละเอียด

ไม่แนะนำให้ทำเช่นนี้เนื่องจากละเมิดความสมบูรณ์ของข้อมูลเมตาการชงของคุณ Brew คิดว่ามีเวอร์ชัน 8b อย่างไรก็ตามคุณรวบรวม 9b ด้วยตนเองและเขียนทับไฟล์

4. เชื่อมโยงเวอร์ชันเก่าด้วยตนเอง(อย่างจริงจัง?)

อย่าตนเอง symlinklibjpeg.8.dylibเหลือ หากไฟล์อยู่ที่นั่นคุณสามารถทำได้brew switchตามที่กล่าวไว้ในแนวทางที่สองข้างต้น

มันเป็นเพียงการแฮ็กที่แย่ที่สุดที่คุณสามารถทำได้ที่นี่


ปัญหาดังกล่าวจะได้รับในที่สุดได้รับการแก้ไข


4
นี่ควรเป็นคำตอบที่ได้รับการยอมรับเกือบจะเป็นบวก
— Mike Legacy

วิธีแรกใช้ได้ผลสำหรับฉัน - อย่างไรก็ตามฉันต้องเรียกใช้xcode-select --installก่อนที่จะติดตั้ง PHP 7.1 ใหม่จากซอร์ส
— jrdn

วิธีที่ 2 ไม่พบการกระทำอีกต่อไปอาจเป็นเพราะแรงผลัก วิธีแก้ปัญหา: แทนของgit checkout b231469ผมทำcurl https://raw.githubusercontent.com/Homebrew/homebrew-core/b23146936a3abb57aabb39017561e7b0c750abbf/Formula/jpeg.rb > Formula/jpeg.rbแล้วแทนการที่ผมเขียนgit checkout master git checkout Formula/jpeg.rb
— tuomassalo

@tuomassalo ขอบคุณสำหรับการแบ่งปันวิธีแก้ปัญหาของคุณ คอมมิตยังคงมีอยู่ในโคลนในเครื่องของฉัน หากเกิดจากการกดบังคับคุณจะไม่สามารถดึงข้อมูลโดยใช้curlอย่างใดอย่างหนึ่ง สำหรับฉันดูเหมือนว่าโคลนในเครื่องของคุณจะไม่ทันสมัยด้วยรีโมต🤔
— ก.ย.

2
หากgit checkout b231469ได้รับข้อผิดพลาดให้ลองสิ่งนี้ก่อนgit -C "$(brew --repo homebrew/core)" fetch --unshallow
— โยชิ

13

ฉันพบปัญหาที่คล้ายกันในวันนี้ สาเหตุของปัญหาคือเวอร์ชันที่ใหม่กว่าของlibjpeg. และวิธีแก้ปัญหาที่ได้ผลคือการสร้างphpขวดจากแหล่งที่มา

ตรวจสอบเวอร์ชันที่ใช้ได้ของlibjpeg:

$brew info libjpeg
jpeg: stable 9b (bottled)
Image manipulation library
http://www.ijg.org
/usr/local/Cellar/jpeg/9b (20 files, 724KB) *
  Poured from bottle on 2017-08-07 at 12:06:42
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/jpeg.rb

ติดตั้งphpจากแหล่งที่มา:

brew install --build-from-source php56

อัปเดต :
หากคุณติดตั้งแล้วphpคุณต้องถอนการติดตั้งก่อนสร้างจากแหล่งที่มา นอกจากนี้ยังใช้กับส่วนขยาย


ตอนนี้เหมือนกัน - เกิดอะไรขึ้นกันแน่? ชงอัปเดต libjpeg แล้วและตอนนี้ยังไม่ได้อยู่ในเวอร์ชันที่เหมาะสมสำหรับ php5.6?
— Toby

btw. คำตอบของคุณ: คำเตือน: josegonzalez / php / php56 5.6.30_6 ได้รับการติดตั้งแล้วอาจควรลบออกก่อน? ดูน่ากลัว: P
— Toby

ใช่คุณต้องถอนการติดตั้งphpและส่วนขยาย จากนั้นติดตั้งphpด้วย--build-from-source. ฉันได้ตรวจสอบประวัติคอมไพล์ของlibjpegสูตรแล้วและเวอร์ชันของlibjpegอัปเดต9bเมื่อวันที่ 5 สิงหาคม
— PawełWacławczyk

ดีจังเลยทำให้มันพัง ... ดีรวบรวมเสร็จแล้ว ตอนนี้ดูเหมือนว่าจะใช้งานได้อีกครั้ง - ขอบคุณ :)
— Toby

นี้ทำงานสำหรับ PHP 7.1 brew install --build-from-source php71เช่นกันเพียงแค่ถอนการติดตั้งและเรียกใช้ brew upgradeปัญหาที่เกิดขึ้นสำหรับฉันในคืนนี้หลังจากทำงาน
— Dwight

6

ฉันมีปัญหาเดียวกันและฉันแก้ไขได้โดยดาวน์โหลด libjpeg tarball manuallu จากที่นี่และเรียกใช้:

tar zxvf jpegsrc.v6b.tar.gz
cd jpeg-6b
cp /usr/share/libtool/config.sub .
cp /usr/share/libtool/config.guess .
./configure --enable-shared --enable-static
make
sudo make install

sudo ranlib /usr/local/lib/libjpeg.a #Optionally

แก้ไขปัญหาเดียวกันสำหรับฉันแม้ว่าเวอร์ชันที่คอมไพล์ควรเป็น v8d แล้วและไฟล์ libtool เหล่านั้นไม่มีอยู่ในระบบของฉัน (ยังใช้งานได้)
— Christoph Burschka

แก้ไขปัญหาให้ฉันด้วย ขอบคุณ!
— Roni Laukkarinen

6

ฉันพบปัญหาที่คล้ายกันในการพยายามอัปเกรดcomposer:

dyld: ไม่ได้โหลดไลบรารี: /usr/local/opt/jpeg/lib/libjpeg.8.dylib
อ้างอิงจาก: / usr / local / bin / php
เหตุผล: ไม่พบรูปภาพ
ผู้แต่ง: ต้องรองรับ PHP Phar สำหรับสูตรนี้
ข้อผิดพลาด: ข้อกำหนดที่ไม่เป็นที่พอใจล้มเหลวในการสร้างนี้

ปัญหาphpไม่พบlibjpegห้องสมุดอีกต่อไป วิธีหนึ่งในการแก้ไขปัญหานี้คือการติดตั้งและphp libjpegนี่คือวิธีที่ฉันติดตั้งใหม่:

# find out which version of php is installed
brew list | grep php

# uninstall php
brew uninstall php70 --ignore-dependencies

# uninstall libjpeg
brew uninstall libjpeg --ignore-dependencies

# install libjpeg again
brew install libjpeg

# install php again
brew install php70

จากนั้นฉันก็สามารถอัปเกรดทุกอย่างได้อีกครั้ง :)

brew update && brew upgrade

🍻


6

วิธีแก้ปัญหาสกปรกที่ใช้ได้ผลดีสำหรับฉัน

ln -s /usr/local/lib/libjpeg.9.dylib /usr/local/lib/libjpeg.8.dylib

5

คำสั่งต่อไปนี้ใช้ได้ผลสำหรับฉัน

brew switch libjpeg 8d

สิ่งนี้ได้ผลสำหรับฉัน ฉันดูในไดเร็กทอรีของฉันโดยใช้ls /usr/local/Cellar/jpeg/และเห็นไดเร็กทอรีย่อยสองไดเร็กทอรี8dและ9c เนื่องจากข้อผิดพลาดของฉันจึง dyld: Library not loaded: /usr/local/opt/jpeg/lib/libjpeg.8.dylibสมเหตุสมผลจึงพยายามโหลดผิด
— TrophyGeek

4

ฉันไม่ได้ลองคำตอบของ Jirson แต่สิ่งที่ได้ผลสำหรับฉันคือ:

brew uninstall libjpeg
brew install libjpeg

คุณจะทำอย่างไรกับแพ็คเกจทั้งหมดที่ขึ้นอยู่กับ libjpeg? ข้อผิดพลาด: ปฏิเสธที่จะถอนการติดตั้ง / usr / local / Cellar / jpeg / 9b เนื่องจากต้องการโดย [SNIP] ซึ่งติดตั้งอยู่ในขณะนี้
— Richard A Quadling

1
@RichardAQuadling คุณสามารถใช้--ignore-dependenciesตัวเลือกนี้เมื่อถอนการติดตั้ง
— 60

ดูเหมือนจะไม่สามารถแก้ปัญหาให้ฉันได้ เวอร์ชัน jpeg ล่าสุดปัจจุบันคือ jpeg-9b libjpeg.8.dylib ยังคงหายไปหลังจากทำตามคำแนะนำของ @ gwg
— Gino

3

ฉันมีปัญหาเดียวกันและสิ่งเดียวที่ช่วยได้คือใช้--build-from-sourceพารามิเตอร์:

brew install php70 --build-from-source

2

ฉันก็มีปัญหานี้เช่นกัน ฉันแก้ไขด้วยวิธีนี้: ถอนการติดตั้ง jpeg / 8b:

brew uninstall --ignore-dependencies libjpeg

ถอนการติดตั้ง jpeg / 9b:

brew uninstall --ignore-dependencies jpeg

ถอนการติดตั้ง jpeg / 8b และ 9b

ติดตั้ง jpeg / 9b อีกครั้ง

brew install jpeg

ติดตั้ง jpeg / 9b อีกครั้ง


ทำงานแล้วเย้ !!
— Husam

1

ฉันกำลังแบ่งปันสิ่งนี้เนื่องจากฉันมีปัญหาเดียวกันเมื่อใช้ PHP5.4 เดิมทีฉันมี PHP5.6 และใช้งานได้ดี จากนั้นฉันก็ลดระดับเป็น php5.4 เนื่องจากแอปของฉันรองรับ PHP5.4 เท่านั้น

จากนั้นข้อผิดพลาดนี้ก็เกิดขึ้น ผมสังเกตเห็นว่าผมมีlibjpeg.9.dylibและ PHP5.4 libjpeg.8.dylibที่กำลังมองหา

การดำเนินการดังต่อไปนี้จัดเรียงปัญหา:

brew uninstall php54
brew install --build-from-source php54


0

ตามบันทึกของ @lifecom สิ่งนี้ได้รับการแก้ไขด้วยการอัปเดต php70 ของ homebrew แต่คุณอาจยังพบปัญหาหากbrew upgradeพยายามอัปเดตแพ็คเกจอื่นก่อนอัปเกรด php70

แก้ไขปัญหานี้ด้วยการอัปเดต php70 ด้วยตนเองก่อนbrew upgrade php70จากนั้นคุณจะสามารถใช้งานได้โดยbrew upgradeไม่มีปัญหา (หรืออย่างน้อยก็ไม่มีปัญหานี้ )



0

ในบางกรณีโดยเฉพาะอย่างยิ่งใน Catalina ถัง Homebrew สำหรับแพ็คเกจอาจมีอยู่ แต่ไม่ได้เชื่อมโยงอย่างถูกต้อง ในกรณีนั้นให้ลอง:

brew link libjpeg
brew reinstall php --build-from-source
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.