dyld:惰性符号绑定失败:未找到符号:_clock_gettime - 在 mongodb laravel 中
dyld: lazy symbol binding failed: Symbol not found: _clock_gettime - in mongodb laravel
我正在使用 Laravel 5.4 版本来使用 link 实现 mongodb CRUD 操作。我正在使用 Mac OS El Captain 10.11。我已经安装了 mongodb.so 扩展 php 版本 7.1.16
当我尝试获取 eloquent 连接时,它抛出我 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 扩展的详细信息
我在网上搜索了错误 dyld: lazy symbol binding failed: Symbol not found: _clock_gettime
并找到了这个 。我已经应用了我提到的所有步骤,但无法解决问题。
请有人帮我摆脱这个。
首先你需要将 os 更新到 macOS Sierra,(我使用的是 10.12 版本)
clock_gettime 没有在 El Capitain 中提供,
Apple(终于)在 Sierra 中引入了 clock_gettime posix API。我们的配置脚本会检测到这一点并启用它。由于二进制文件不是在 Sierra 上执行,而是在不存在此功能的 El Capitain 上执行,因此运行时链接失败。使用您建议的解决方法不是一个好的解决方案。这似乎可行,但稍后您可能会遇到奇怪的故障并不是不可能的os,因为二进制文件不是针对它正在执行的系统编译的。
从自制软件安装的 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-mongogb
、php56-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
我正在使用 Laravel 5.4 版本来使用 link 实现 mongodb CRUD 操作。我正在使用 Mac OS El Captain 10.11。我已经安装了 mongodb.so 扩展 php 版本 7.1.16
当我尝试获取 eloquent 连接时,它抛出我 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 扩展的详细信息
dyld: lazy symbol binding failed: Symbol not found: _clock_gettime
并找到了这个
请有人帮我摆脱这个。
首先你需要将 os 更新到 macOS Sierra,(我使用的是 10.12 版本)
clock_gettime 没有在 El Capitain 中提供,
Apple(终于)在 Sierra 中引入了 clock_gettime posix API。我们的配置脚本会检测到这一点并启用它。由于二进制文件不是在 Sierra 上执行,而是在不存在此功能的 El Capitain 上执行,因此运行时链接失败。使用您建议的解决方法不是一个好的解决方案。这似乎可行,但稍后您可能会遇到奇怪的故障并不是不可能的os,因为二进制文件不是针对它正在执行的系统编译的。
从自制软件安装的 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-mongogb
、php56-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