Сборка Vim с rbenv и Command-T на OSX

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 Ожидается в: плоском пространстве имен 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 внутри корневой папки, обеспечивая при этом ту же версию 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 (что тоже здорово), но я бы хотел еще раз попробовать и хотя бы выяснить, что его убивает, поэтому любые идеи помогут. Благодарю.

2 ответа

Решение

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

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

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

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

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

Другие вопросы по тегам