web-dev-qa-db-ja.com

dyld:遅延シンボルバインディングが失敗しました:シンボルが見つかりません:_clock_gettime-mongodb内laravel

私はLaravel 5.4バージョンを使用して link を使用したmongodb CRUD操作を実装しています。MacOS El Captain 10.11を使用しています。phpバージョン7.1でmongodb.so拡張機能をインストールしました.16

雄弁な接続を取得しようとしているときにスローされますERR_EMPTY_RESPONSE

MAMPサーバーの再起動中にApacheで次のエラーログが見つかりました。

 Mon Aug 28 10:22:14 2017] [notice] Graceful restart requested, doing restart
[Mon Aug 28 10:22:15 2017] [notice] Digest: generating secret for digest authentication ...
[Mon Aug 28 10:22:15 2017] [notice] Digest: done
[Mon Aug 28 10:22:15 2017] [notice] Apache/2.2.31 (Unix) mod_wsgi/3.5 
 Python/2.7.13 PHP/7.1.1 mod_ssl/2.2.31 OpenSSL/1.0.2j DAV/2 
mod_fastcgi/2.4.6 mod_Perl/2.0.9 Perl/v5.24.0 configured -- resuming normal operations
[Mon Aug 28 10:22:15 2017] [notice] FastCGI: process manager initialized (pid 4233)
dyld: lazy symbol binding failed: Symbol not found: _clock_gettime
Referenced from: 
/Applications/MAMP/bin/php/php7.1.1/lib/php/extensions/no-debug-non-zts-20160303/mongodb.so
Expected in: /usr/lib/libSystem.B.dylib

dyld: Symbol not found: _clock_gettime
Referenced from: 
/Applications/MAMP/bin/php/php7.1.1/lib/php/extensions/no-debug-non-zts-20160303/mongodb.so
Expected in: /usr/lib/libSystem.B.dylib

dyld: lazy symbol binding failed: Symbol not found: _clock_gettime
Referenced from: 
 /Applications/MAMP/bin/php/php7.1.1/lib/php/extensions/no-debug-non-zts-20160303/mongodb.so
 Expected in: /usr/lib/libSystem.B.dylib

dyld: Symbol not found: _clock_gettime
Referenced from: 
/Applications/MAMP/bin/php/php7.1.1/lib/php/extensions/no-debug-non-zts-20160303/mongodb.so
 Expected in: /usr/lib/libSystem.B.dylib

このスクリーンショットは、mongodb拡張機能の詳細を示しています enter image description here オンラインでエラーdyld: lazy symbol binding failed: Symbol not found: _clock_gettimeを検索したところ、これが見つかりました answer 。私が言及したすべての手順を適用しましたが、問題を修正できません。

これを取り除くために誰かが私を助けてください。

11
Chintan7027

まず、OSをmacOS Sierraに更新する必要があります(私はバージョン10.12を使用しています)

clock_gettimeはEl Capitainでは提供されませんでした。

Appleは(ついに)Sierraにclock_gettime posix APIを導入しました。私たちの構成スクリプトはこれを検出し、それを使用できるようにします。バイナリはSierraでは実行されないため、この機能が存在しないEl Capitainで実行されるため、ランタイムでのリンクは失敗します。提案する回避策を使用することは良い解決策ではありません。これは一見動作するように見えるかもしれませんが、バイナリが実行されているシステム用にコンパイルされていないため、後で奇妙なエラーが発生することは不可能ではありません。

参照元: https://bugs.erlang.org/browse/ERL-256

4

私たちはあなたの問題のトラブルシューティングを行うので、これは常に変化する答えになるでしょう。

terminalから始めます:

brew update && brew upgrade && brew doctor
0
black_sheep07

Homebrewからインストールされた最新バージョンのphp {XX} -mongodbは、OS X <10.12には存在しなかった_clock_gettimeと呼ばれるOS X 10.12固有のシンボルの使用に依存しています。

システムをアップグレードするとこの問題は解決しますが、アップグレードしたくない理由がいくつかある有効場合があります。

OS X 10.11互換性を維持するために、現在作業中のプルリクエストがあります。

https://github.com/Homebrew/homebrew-php/issues/3737

https://github.com/Homebrew/homebrew-php/pull/389

これは受け入れられませんが、phpXX-mongodbの式を自分でハッキングできます ここの@adocwangがうまく提案しているように

(必ず最初にxcode-selectツールをインストールしてください)

Sudo xcode-select --install
# Or if you already installed it
softwareinstall --install -a

次に、php {XX} -mongodb式を編集します(これはphp71-mongogbphp56-mongodb、または使用しているPHP使用しているバージョン)になります)

brew edit php{XX}-mongodb

「def install」の行を見つけて置き換えます

def install
  Dir.chdir "mongodb-#{version}" unless build.head?

沿って

def install
  Dir.chdir "mongodb-#{version}" unless build.head?

  if MacOS.version == "10.11" && MacOS::Xcode.installed? && MacOS::Xcode.version >= "8.0"
    inreplace %w[src/libbson/src/bson/bson-clock.c], "HAVE_CLOCK_GETTIME", "UNDEFINED_GIBBERISH"`
  end

次に、この数式をソースから再インストールします

brew reinstall -s php{XX}-mongodb
0
Flo Schild