dyld:懒符号绑定失败:未找到符号:_clock_gettime - 在mongodb laravel中

时间:2017-08-23 07:42:44

标签: php mongodb macos laravel-5.3

我使用Laravel 5.4版本使用link实现mongodb CRUD操作。我正在使用Mac OS El Captain 10.11。我已经安装了php版本7.1.16的mongodb.so扩展名

虽然我正在努力获得雄辩的连接,但它却让我感到非常震惊 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。我已经应用了我提到的所有步骤,但无法解决问题。

请有人帮助我摆脱这个。

3 个答案:

答案 0 :(得分:4)

首先你需要将你的操作系统更新到macOS Sierra,(我使用的是版本10.12)

El Capitain未提供

clock_gettime,

Apple(最终)在Sierra推出了clock_gettime posix API。我们的配置脚本检测到此并启用它的使用。由于二进制文件不是在Sierra上执行,而是在不存在此功能的El Capitain上执行,因此运行时链接失败。使用您建议的解决方法不是一个好的解决方案。这可能看似有效,但是由于二进制文件没有针对正在执行的系统进行编译,因此在以后发生奇怪的失败并非不可能。

参考来自:https://bugs.erlang.org/browse/ERL-256

答案 1 :(得分:0)

当我们解决您的问题时,这将是一个不断变化的答案。

terminal开始:

brew update && brew upgrade && brew doctor

答案 2 :(得分:0)

从自制软件安装的最新版本的php {XX} -mongodb依赖于使用名为_clock_gettime的OS X 10.12特定符号,该符号在OS X< 10.12。

升级系统将解决此问题,但您可能有一些有效的理由不希望升级它。

目前正在进行拉动请求以保持OS X 10.11兼容性:

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

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

虽然不接受此操作,但您可以自行破解phpXX-mongodb公式,as nicely suggested by @adocwang here

(请务必先安装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