Estoy intentando escribir una extensión de Ruby, y he estado compilando satisfactoriamente mi archivo de objeto compartido nmatrix.so
todo el día. Pero luego, de repente, comienza a producir nmatrix.bundle
en su lugar, sin ningún archivo .so
en absoluto.¿Cómo causé que gcc produjera un .blundle en lugar de .so?
No me está dando ningún error de enlazador, así que no puedo imaginarme por qué. Tampoco cambié nada en my Makefile
or extconf.rb
. He estado usando constantemente Ruby 1.9.3p0 a través de rvm.
He intentado hacer un git stash save
con mi trabajo para el día y la compilación de algo que sé debería funcionar sin errores de enlace (algo que produce un .so) anterior. Desafortunadamente, eso también produce un archivo .bundle
.
Claramente he hecho algo, tal vez haya instalado algo inadvertidamente, lo que ha cambiado algunos ajustes críticos de GCC. Esto es totalmente posible, ya que pasé la mayor parte del día tratando de construir LAPACK y ATLAS, y también instalé homebrew en algún momento.
He descubierto que hay una solución alternativa. Cómo cambio de estas dos líneas:
DLLIB = $(TARGET).bundle
# ...
LDSHARED = $(CC) -dynamic -bundle
a
DLLIB = $(TARGET).so
# ...
LDSHARED = $(CC) -dynamic
y después la biblioteca compila y cargas correctamente. Sin embargo, no tengo el más mínimo cambio en extconf.rb
(o en otro lugar) que hubiera provocado que se genere automáticamente este archivo Makefile con .bundle
en lugar de .so
.
La pregunta es: ¿cómo exactamente causé esto y qué debo hacer para restaurarlo?
¿Puedes incluir tu 'Makefile'? – sarnold
Hecho. El Makefile se genera automáticamente usando 'rvm ruby extconf.rb', por lo que he incluido' extconf.rb' también. –