Construindo o Vim com o rbenv e o Command-T no OSX

2

dyld: ligação de símbolo lento falhou: Símbolo não encontrado: _rb_encdb_declare Referenciado de: / Users / sa125 /.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/x86_64-darwin10.8.0/enc/encdb.bundle Esperado em: namespace simples

dyld: símbolo não encontrado: _rb_encdb_declare Referenciado de: / Users / sa125 /.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/x86_64-darwin10.8.0/enc/encdb.bundle Esperado em: namespace simples Vim: Travei sinal mortal SEGV

Oi,

Eu criei o vim no meu MacbookPro (executando o OSX 10.6.8) e tentando fazer o Command-T funcionar. O ruby no meu sistema é fornecido pelo RBENV, e eu usei o seguinte script simples para construir e instalar o 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

O Vim compila e tudo funciona, exceto o Command-T. Eu reinstalei o Command-T clonando o repositório e executando rake make && make dentro da pasta raiz, enquanto assegurava que a mesma versão do ruby (1.9.3-p194) era usada para compilar o vim e o Command-T. Quando eu executo o vim e carrego o Command-T, ele cai com o seguinte erro:

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

Eu tentei construir ambos com uma versão ruby diferente (1.9.2-p320), mas o resultado foi o mesmo. Se tudo mais falhar, usarei CtrlP (o que também é ótimo), mas eu gostaria de dar outra chance e, pelo menos, descobrir o que está matando, então qualquer idéia ajudará. obrigado.

    
por sa125 30.10.2012 / 16:41

2 respostas

1

Eu escrevi uma postagem no blog sobre minhas experiências com o mesmo problema, mas em poucas palavras eu acho que você precisa aplicar este patch à sua compilação Ruby e então construir o Vim com aquele Ruby especificado. Quando você constrói o Command-T, certifique-se de usar o mesmo interpretador Ruby.

Aqui está o patch para tornar mais fácil para os Googlers:

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 */

Novamente, se ajudar alguém, aqui está uma fórmula ruby-build que eu uso para automatizar a adição desse patch e os remendos do falcão:

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

EDIT 31 de agosto de 2013 : As versões atuais do Ruby não precisam mais desse patch (o Ruby o tem por padrão). No entanto, ainda há uma coisa que pode dar errado. Você deve se certificar de que o Ruby seja construído como uma biblioteca compartilhada. Se o Vim travar da mesma maneira, provavelmente tem a ver com esse problema. Certifique-se de adicionar suas opções de configuração, incluindo --enable-shared . (Veja este relatório de bug para discussão futura.)

    
por 01.11.2012 / 01:39
2

Você poderia simplesmente ignorar o rbenv e usar o sistema Ruby ao configurar o Vim:

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

e também ao configurar o Command-T:

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

    
por 05.02.2013 / 14:41