dyld : 라이브러리가로드되지 않음 : /usr/local/lib/libjpeg.8.dylib-homebrew php


108

이 libpng 문제 가 발생 하여 PHP가 작동하지 않았 으므로 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 doctorbrew list?
IKavanagh

답변:


250

homebrew-php repo 문제 에서 @ jirson-tavera가 제안했듯이 이것은 brew 설치를 재정의하지 않고 수정할 수 있습니다.

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
어쩌면 청소에 대한 홀수 라인을 추가하는 것 외에도,이 허용 대답 ...해야한다
공원 Betsens

나를 위해 일했습니다. 감사.
Adrian Lynch

나를 위해 일했습니다. 건배.
Eduardo Leggiero

19
대신 올바른 방법을 고려하십시오 .
sepehr

덕분에 작품은, 내가 설치 rabbitmq 후 동일한 문제를 가지고
오마르 Makled

167

수락 된 답변의 솔루션이 작동하더라도 문제를 해결하는 올바른 방법은 아닙니다. Brew의 메타 데이터 무결성을 위반합니다.

문제

문제는 Homebrew의 jpeg공식이 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의 버전을 컴파일하고 덮어 씁니다. 자세한 내용은 Denis의 답변 을 참조하십시오.

이는 추출 메타 데이터의 무결성을 위반하므로 권장되지 않습니다. Brew는 8b 버전이 있다고 생각하지만 수동으로 9b를 컴파일하고 파일을 덮어 썼습니다.

4. 이전 버전을 수동으로 심볼릭 링크 (진지하게?)

남은 부분을 수동으로 심볼릭 링크 하지 마십시오 libjpeg.8.dylib. 파일이있는 경우 brew switch위의 두 번째 솔루션에서 언급 한대로 파일로 이동할 수 있습니다 .

여기서 할 수있는 최악의 해킹입니다.


이러한 문제는 결국 수정 될 것 입니다.


4
이것은 거의 긍정적으로 받아 들여진 대답이어야합니다.
Mike Legacy

첫 번째 방법은 저에게 효과적이었습니다. 그러나 xcode-select --install소스에서 PHP 7.1을 재설치하기 전에 실행 해야했습니다.
jrdn

방법 2는 강제 푸시로 인해 더 이상 커밋을 찾지 못합니다. A는 해결 방법 : 대신 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둘 중 하나를 사용하여 가져올 수 없습니다 . 나에게는 로컬 클론이 원격으로 최신 상태가 아닌 것 같습니다 🤔.
sepehr

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소스에서 빌드하기 전에 제거해야합니다. 확장에도 적용됩니다.


바로 지금 여기에서-정확히 무슨 일이 일어 났습니까? brew 업데이트 된 libjpeg가 php5.6에 적합한 버전이 아니 었습니까?
Toby

btw. 답변 출력 : 경고 : josegonzalez / php / php56 5.6.30_6이 이미 설치되어 있습니다. 먼저 제거해야합니까? 무서운 것 : P
토비

예, php그리고 확장 을 제거 해야합니다. 그런 다음 설치 php와 함께 --build-from-source. 나는 libjpeg공식 의 git 역사를 살펴 보았고 버전은 8 월 5 일 libjpeg에 업데이트되었습니다 9b.
Paweł Wacławczyk

멋져서 어떻게 든 망가 졌어. 컴파일이 끝났어. :) 덕분에 - 이제 다시 작동하는 것 같다
토비

이것은 PHP 7.1에서도 작동했으며 제거하고 brew install --build-from-source php71. 오늘 밤 실행 후 문제가 발생했습니다 brew upgrade.
Dwight

6

나는 똑같은 문제가 있었고 여기 에서 libjpeg tarball 설명서를 다운로드하고 실행하여 해결했습니다 .

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. 이 문제를 해결하는 한 가지 방법은 phplibjpeg. 다시 설치 한 방법은 다음과 같습니다.

# 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에 의존하는 모든 패키지로 무엇을합니까? 오류 : 현재 설치된 [SNIP]에 필요하기 때문에 / usr / local / Cellar / jpeg / 9b 제거를 거부합니다.
Richard A Quadling

1
@RichardAQuadling --ignore-dependencies제거 할 때 옵션을 사용할 수 있습니다 .
sepehr

이것은 나를 위해 문제를 해결하지 못하는 것 같습니다. 최신 jpeg 버전은 현재 jpeg-9b입니다. @gwg의 지침을 따른 후에도 libjpeg.8.dylib가 여전히 누락되었습니다.
Gino

3

나는 같은 문제가 있었고 도움이 된 유일한 것은 --build-from-source매개 변수 를 사용하는 것입니다 .

brew install php70 --build-from-source

2

나도이 문제가 있었다. 이 방법으로 해결했습니다 : Uninstall 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

Homebrew PHP가 업데이트되었으며 더 이상 libjpeg에서 문제가되지 않습니다.


0

@lifecom이 지적했듯이 이것은 homebrew의 php70 업데이트로 해결 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.