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.