dyld:惰性符号绑定失败:未找到符号:_rb_encdb_declare 引用自:/Users/sa125/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/x86_64-darwin10.8.0/enc/encdb.bundle 预期位于:平面命名空间
dyld:未找到符号:_rb_encdb_declare 引用自:/Users/sa125/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/x86_64-darwin10.8.0/enc/encdb.bundle 预期位于:flat namespace Vim:捕获致命信号 SEGV
你好,
我已经在 MacbookPro(运行 OSX 10.6.8)上构建了 vim,并尝试让 Command-T 工作。我的系统上的 ruby 由 RBENV 提供,我使用以下简单脚本来构建和安装 vim:
#!/bin/bash
make distclean
./configure --with-features=huge \
--enable-rubyinterp=yes \
--with-ruby-command=`rbenv which ruby` \
--enable-pythoninterp \
--enable-perlinterp \
--enable-cscope=yes \
make
make install
Vim 编译成功,除 Command-T 外,其他一切都正常。我通过克隆 repo 并rake make && make
在根文件夹内运行重新安装了 Command-T,同时确保使用相同的 ruby 版本 (1.9.3-p194) 来编译 vim 和 Command-T。当我运行 vim 并加载 Command-T 时,它崩溃并出现以下错误:
dyld: lazy symbol binding failed: Symbol not found: _rb_encdb_declare
Referenced from: /Users/sa125/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/x86_64-darwin10.8.0/enc/encdb.bundle
Expected in: flat namespace
dyld: Symbol not found: _rb_encdb_declare
Referenced from: /Users/sa125/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/x86_64-darwin10.8.0/enc/encdb.bundle
Expected in: flat namespace
Vim: Caught deadly signal SEGV
我尝试使用不同的 ruby 版本 (1.9.2-p320) 构建两者,但结果相同。如果其他方法都失败了,我会使用CtrlP
(这也很好),但我想再试一次,至少找出导致问题的原因,所以任何想法都会有所帮助。谢谢。
答案1
我写了一个博客文章关于我遇到同样问题的经历,但简而言之,我认为你需要申请此补丁到您的 Ruby 构建,然后使用指定的 Ruby 构建 Vim。构建 Command-T 时,请确保使用相同的 Ruby 解释器。
以下是为方便 Google 员工使用的补丁:
diff --git a/missing/setproctitle.c b/missing/setproctitle.c
index 169ba8b..4dc6d03 100644
--- a/missing/setproctitle.c
+++ b/missing/setproctitle.c
@@ -48,6 +48,12 @@
#endif
#include <string.h>
+#if defined(__APPLE__)
+#include <crt_externs.h>
+#undef environ
+#define environ (*_NSGetEnviron())
+#endif
+
#define SPT_NONE 0 /* don't use it at all */
#define SPT_PSTAT 1 /* use pstat(PSTAT_SETCMD, ...) */
#define SPT_REUSEARGV 2 /* cover argv with title information */
再次,如果它对其他人有帮助,这是一个ruby-build我用来自动添加此补丁和猎鹰补丁的公式:
build_package_combined_patch() {
local package_name="$1"
{
curl https://raw.github.com/gist/3905045/bf9d1c84c72cdce5be52d8b2dfd4d86a1cdbf185/gistfile1.txt | git apply
curl https://raw.github.com/wayneeseguin/rvm/master/patches/ruby/1.9.3/p286/falcon.diff | git apply
autoconf
./configure --prefix="$PREFIX_PATH" $CONFIGURE_OPTS --enable-shared
make -j 8
make install
} >&4 2>&1
}
require_gcc
install_package "yaml-0.1.4" "http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz"
install_package "ruby-1.9.3-p286" "http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p286.tar.gz" combined_patch
编辑于 2013 年 8 月 31 日:Ruby 的当前版本不再需要此补丁(Ruby 默认已安装此补丁)。但是,仍有一件事可能出错。您必须确保 Ruby 是作为共享库构建的。如果 Vim 以同样的方式崩溃,则可能与此问题有关。请确保添加您的配置选项 include --enable-shared
。(请参阅此错误报告以供进一步讨论。
答案2
您可以绕过 rbenv 并在配置 Vim 时使用系统 Ruby:
./configure --with-ruby-command=/usr/bin/ruby
以及设置 Command-T 时:
/usr/bin/ruby extconf.rb && make