web-dev-qa-db-ja.com

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

助言がありますか?

102
Snowcrash

homebrew-phpリポジトリの問題 で@ 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
241
Denis Pitzalis

受け入れられた答えの解決策は機能しますが、問題を解決する正しい方法ではありません。 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 'answer を参照してください。

抽出メタデータの整合性に違反するため、これはお勧めしません。 Brewは8bバージョンを持っていると考えていますが、9bを手動でコンパイルし、ファイルを上書きしました。

4.古いバージョンを手動でシンボリックリンクします (マジ?)

手動でシンボリックリンク 残ったlibjpeg.8.dylibをしないでください。ファイルがそこにある場合は、上記の2番目のソリューションで述べたように、brew switchだけを実行できます。

ここでできるのは最悪のハックです。


このような問題は最終的には 修正済み になります。

155
sepehr

今日、同様の問題に遭遇しました。問題の原因は、libjpegの新しいバージョンでした。そして、解決した解決策は、ソースからphp bottleを構築することでした。

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を既にインストールしている場合は、ソースからビルドする前にアンインストールする必要があります。拡張機能にも適用されます。

13

composerをアップグレードしようとすると、同様の問題が発生していました。

dyld:ライブラリがロードされていません:/usr/local/opt/jpeg/lib/libjpeg.8.dylib
参照元:/ usr/local/bin/php
理由:画像が見つかりません
composer:PHPこの式にはPharのサポートが必要です
エラー:要件が満たされていないため、このビルドは失敗しました。

問題はphplibjpegライブラリをもう見つけられなかったことでした。これを修正する1つの方法は、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
GabLeRoux

私は同じ問題を抱えていたので、手動で here から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
6
Jirson Tavera

次のコマンドは私のために働いた。

brew switch libjpeg 8d
5
Pankaj Agrawal

私はジルソンの答えを試しませんでしたが、私のために働いたのは:

brew uninstall libjpeg
brew install libjpeg
4
gwg

私は同じ問題を抱えていましたが、助けた唯一のことは--build-from-sourceパラメータを使用することでした:

brew install php70 --build-from-source
3
martin

汚い解決策、それは私にとってはうまくいく。

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

私もこの問題を抱えていました。私はこの方法で解決しました:jpeg/8bをアンインストールします:

brew uninstall --ignore-dependencies libjpeg

Jpeg/9bをアンインストールします。

brew uninstall --ignore-dependencies jpeg

Uninstall jpeg/8b and 9b

Jpeg/9bを再インストールします

brew install jpeg

Re-install jpeg/9b

1
Roberto

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
1

@lifecomが指摘しているように、これはhomebrewのphp70アップデートで修正されていますが、brew upgradeがphp70をアップグレードする前に他のパッケージをアップデートしようとすると、問題が発生する可能性があります。

これを修正するには、最初にbrew upgrade php70でphp70を手動で更新します。その後、brew upgradeを問題なく(または、少なくともthis問題なしで)実行できるはずです。

0
Dave Hamilton
brew switch libjpeg 8d

Valet-php7.1を搭載したMac

0
Basem Olimy

Homebrew phpが更新され、libjpegの問題はなくなりました

0
lifecom