2011-10-26 24 views
5

Acabo de hacer una nueva instalación de ruby ​​1.8.7 REE y MRI en una máquina con conjuntos de gemas frescas (usando RVM) Sin embargo, en cada uno de ellos cuando trato de usar memprof consigo esto errorRuby 1.8.7: Símbolo no encontrado Error

$ gem install memprof 
$ irb 
>> require 'rubygems' 
>> require 'memprof' 
>> LoadError: dlopen(/Users/schneems/.rvm/gems/[email protected]/gems/memprof-0.3.10/lib/memprof.bundle, 9): Symbol not found: __mh_bundle_header 
    Referenced from: /Users/schneems/.rvm/gems/[email protected]/gems/memprof-0.3.10/lib/memprof.bundle 
    Expected in: flat namespace 
in /Users/schneems/.rvm/gems/[email protected]/gems/memprof-0.3.10/lib/memprof.bundle - /Users/schneems/.rvm/gems/[email protected]/gems/memprof-0.3.10/lib/memprof.bundle 
    from /Users/schneems/.rvm/gems/[email protected]/gems/memprof-0.3.10/lib/memprof.bundle 
    from /Users/schneems/.rvm/rubies/ruby-1.8.7-p352/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:59:in `require' 
    from (irb):2 

El error es Symbol not found: __mh_bundle_header. Mi pregunta es esta: ¿qué debo hacer para que mi sistema encuentre este símbolo o hay algo más que deba instalar? Cualquier sugerencia de depuración bienvenida.

+0

Yay por la etiqueta ambigua [symbol]. –

+1

He publicado una meta pregunta sobre la etiqueta: http://meta.stackexchange.com/questions/110399/how-should-the-symbols-tags-be-split-up –

Respuesta

1

Parece que no se compiló correctamente y que faltan los indicadores del enlazador para la biblioteca del paquete. Intenta construirlo: LDFLAGS="-bundle" ... No estoy seguro de cómo hacerlo con RVM, pero supongo que heredará el entorno que le proporciones.

EDIT | Lo sentimos, parece que la bandera ld correcta puede ser: LDFLAGS="-bundler_loader" EDITAR 2 | En realidad, no estoy seguro de si es bundle o bundle_loader ... Estoy viendo ambos en los resultados de Google.

+0

He intentado usar 'rvm export' con ambas banderas y sigo recibiendo el error. Tal vez ese no es el comando correcto? – Schneems

+0

'rvm export' parece ser para administrar conjuntos de gemas, no para cambiar las configuraciones de compilación. Primero intente eliminar memprof, luego haga 'LDFLAGS =" - bundle "gem install memprof', y si eso no funciona, intente construir ruby ​​de la misma manera (con LDFLAGS configurado) ... no está claro desde el backtrace que está intentando para usar el paquete. Creo que en realidad es Ruby cuando intento cargar la joya. – d11wtq

+0

intentado 'LDFLAGS =" - paquete "gem install memprof' y también' LDFLAGS = "- paquete" rvm install 1.8.7' y ninguno funcionó. – Schneems

3

Esto es lo que hice para conseguir que funcione en Snow Leopard:

cd ..../gems/memprof-0.3.10/ext/

Editar Makefile, búsqueda de LD_SHARED =

Cambio de

LDSHARED = cc -arch x86_64 -dynamiclib -undefined suppress -flat_namespace

a

LDSHARED = cc -arch x86_64 -bundle -bundle_loader $(RUBY) -undefined suppress -flat_namespace

(reemplazado -dynamiclib con -bundle y opciones -bundleloader)

Entonces,

make install (que crea memprof.bundle y lo copia en memprof */lib)

Edición: Solo para aclarar, $(RUBY) debe contener la ruta de acceso completa al intérprete de Ruby (el ejecutable). En RVM, el Makefile lo inicializa al intérprete apropiado, por lo que la línea anterior funciona sin problemas.

+0

gracias por la respuesta, lo probaré tan pronto como tenga la oportunidad. ¿Qué está haciendo exactamente el cambio anterior? – Schneems

+2

-bundle crea un paquete, un formato de biblioteca dinámica específica para mac. El paquete memprof tiene referencias a símbolos en el programa host, el intérprete de ruby. La opción -bundle_loader apunta al ejecutable particular que va a cargar este paquete. –

+0

Gracias, esto funcionó. Archivé un error: https://github.com/ice799/memprof/issues/18 – John

Cuestiones relacionadas