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

이 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

어떤 제안?



답변

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


답변

수락 된 답변의 솔루션이 작동하더라도 문제를 해결하는 올바른 방법은 아닙니다. 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위의 두 번째 솔루션에서 언급 한대로 파일로 이동할 수 있습니다 .

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


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


답변

오늘도 비슷한 문제가 발생했습니다. 문제의 원인은 최신 버전의 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 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


답변

업그레이드하려고 비슷한 문제가 발생했습니다 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

?


답변

저에게 잘 작동하는 더러운 솔루션입니다.

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


답변

다음 명령이 나를 위해 일했습니다.

brew switch libjpeg 8d