2

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

Привет,

Я собрал vim на своем MacbookPro (под управлением OSX 10.6.8) и пытаюсь заставить Command-T работать. Рубин в моей системе предоставлен 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. Я переустановил Command-T, клонировав репозиторий и запустив rake make && make внутри корневой папки, убедившись, что для компиляции vim и Command-T была использована та же версия ruby (1.9.3-p194). Когда я запускаю 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 (что тоже здорово), но я бы хотел еще раз попробовать и, по крайней мере, выяснить, что его убивает, поэтому любые идеи помогут. Благодарю.

2 ответа2

2

Вы можете просто обойти rbenv и использовать системный Ruby при настройке Vim:

./configure --with-ruby-command=/usr/bin/ruby

а также при настройке Command-T:

/usr/bin/ruby extconf.rb && make

1

Я написал сообщение в блоге о своем опыте с той же проблемой, но в двух словах, я думаю, вам нужно применить этот патч к вашей сборке Ruby, а затем собрать Vim с указанным Ruby. При сборке 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

РЕДАКТИРОВАТЬ 31 августа 2013 г .: Текущие версии Ruby больше не нуждаются в этом патче (в Ruby он есть по умолчанию). Тем не менее, есть еще одна вещь, которая может пойти не так. Вы должны убедиться, что Ruby собран как общая библиотека. Если Vim падает таким же образом, это, вероятно, связано с этой проблемой. Убедитесь, что вы добавили параметры конфигурации, включая --enable-shared . (См. Этот отчет об ошибке для дальнейшего обсуждения.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .