2010-09-01 20 views
5

No instalé la gema 'iconv', debido a errores de compilación raros.
He compilado el 'libiconv' desde el código fuente y he vinculado .h y .dylib en el directorio include y lib del rvm. cuando corroNo se pudo construir la gema iconv en ruby ​​1.9.2

gem install iconv 

salidas Gem extraños errores de generación:

construcción extensiones nativas. Esto podría llevar un tiempo ...

ERROR: Error installing iconv: 
    ERROR: Failed to build gem native extension. 

/Users/myusername/.rvm/rubies/ruby-1.9.2-rc2/bin/ruby extconf.rb 
checking for iconv() in iconv.h... no 
checking for iconv() in -liconv... yes 
checking for const of iconv() 2nd argument... no 
creating Makefile 

make 
gcc -I. -I/Users/myusername/.rvm/rubies/ruby-1.9.2-rc2/include/ruby-1.9.1/x86_64-darwin10.4.0 -I/Users/myusername/.rvm/rubies/ruby-1.9.2-rc2/include/ruby-1.9.1/ruby/backward -I/Users/myusername/.rvm/rubies/ruby-1.9.2-rc2/include/ruby-1.9.1 -I. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -fno-common -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wpointer-arith -Wwrite-strings -Wno-missing-field-initializers -Wshorten-64-to-32 -Wno-long-long -fno-common -pipe -o iconv.o -c iconv.c 
In file included from iconv.c:21: 
/Users/myusername/.rvm/rubies/ruby-1.9.2-rc2/include/ruby-1.9.1/ruby/backward/st.h:2:2: warning: #warning use "ruby/st.h" instead of bare "st.h" 
iconv.c:22:20: error: intern.h: No such file or directory 
iconv.c: In function ‘map_charset’: 
iconv.c:139: error: ‘struct RHash’ has no member named ‘tbl’ 
iconv.c:139: error: ‘struct RHash’ has no member named ‘tbl’ 
iconv.c:142: error: ‘struct RHash’ has no member named ‘tbl’ 
iconv.c: In function ‘iconv_create’: 
iconv.c:187: error: ‘struct RString’ has no member named ‘len’ 
iconv.c:188: error: ‘struct RString’ has no member named ‘len’ 
iconv.c:190: error: ‘struct RString’ has no member named ‘ptr’ 
iconv.c:190: error: ‘struct RString’ has no member named ‘ptr’ 
iconv.c:190: error: ‘struct RString’ has no member named ‘ptr’ 
iconv.c:190: error: ‘struct RString’ has no member named ‘ptr’ 
iconv.c:192: error: ‘struct RString’ has no member named ‘ptr’ 
iconv.c:193: error: ‘struct RString’ has no member named ‘len’ 
iconv.c: In function ‘iconv_fail’: 
iconv.c:328: error: ‘struct RString’ has no member named ‘len’ 
iconv.c: In function ‘iconv_fail_retry’: 
iconv.c:352: error: ‘ruby_errinfo’ undeclared (first use in this function) 
iconv.c:352: error: (Each undeclared identifier is reported only once 
iconv.c:352: error: for each function it appears in.) 
iconv.c: In function ‘rb_str_derive’: 
iconv.c:371: error: ‘struct RString’ has no member named ‘ptr’ 
iconv.c:371: error: ‘struct RString’ has no member named ‘len’ 
iconv.c:373: error: ‘struct RString’ has no member named ‘ptr’ 
iconv.c:373: error: ‘struct RString’ has no member named ‘len’ 
iconv.c:374: error: ‘struct RString’ has no member named ‘ptr’ 
iconv.c: In function ‘iconv_convert’: 
iconv.c:418: error: ‘struct RArray’ has no member named ‘len’ 
iconv.c:418: error: ‘struct RArray’ has no member named ‘ptr’ 
iconv.c:436: error: ‘struct RString’ has no member named ‘len’ 
iconv.c:437: error: ‘struct RString’ has no member named ‘ptr’ 
iconv.c:455: warning: comparison of unsigned expression >= 0 is always true 
iconv.c:458: warning: comparison between signed and unsigned 
iconv.c:459: warning: comparison between signed and unsigned 
iconv.c:491: warning: implicit conversion shortens 64-bit value into a 32-bit value 
iconv.c:494: warning: implicit conversion shortens 64-bit value into a 32-bit value 
iconv.c:497: error: ‘struct RArray’ has no member named ‘len’ 
iconv.c:498: error: ‘struct RArray’ has no member named ‘ptr’ 
iconv.c:499: error: ‘struct RArray’ has no member named ‘ptr’ 
iconv.c:501: error: ‘struct RString’ has no member named ‘len’ 
iconv.c:502: error: ‘struct RString’ has no member named ‘ptr’ 
iconv.c:514: warning: implicit conversion shortens 64-bit value into a 32-bit value 
iconv.c: In function ‘iconv_s_convert’: 
iconv.c:615: error: ‘struct RString’ has no member named ‘len’ 
make: *** [iconv.o] Error 1 


Gem files will remain installed in /Users/myusername/.rvm/gems/ruby-1.9.2-rc2/gems/iconv-0.1 for inspection. 
Results logged to /Users/myusername/.rvm/gems/ruby-1.9.2-rc2/gems/iconv-0.1/ext/iconv/gem_make.out 

¿Cómo puedo instalarlo y compilarlo correctamente?

Gracias

+3

Ruby 1.9 incluye el equivalente de la gema 'iconv' de forma predeterminada. No deberías necesitar la gema. Los errores, especialmente los errores "sin nombre de miembro ...", indican que la gema no es compatible con Ruby 1.9 (muchas de las estructuras para los tipos incorporados fueron, bueno, reestructuradas). –

Respuesta

1

¡Creo que he descubierto por qué! Parece que la gema Iconv todavía no es compatible con 1.9.x, por lo que no se compilará.

3

¿Por qué/cómo construiste iconv? Y más importante, ¿dónde lo instalaste? Porque creo que gem puede encontrar el sistema libiconv pero no puede encontrar los encabezados porque no están en las rutas de búsqueda normales.

algunas sugerencias:

La manera más fácil es probablemente usar MacPorts e instalar iconv con eso: sudo port install libiconv

O si quieres/necesidad de instalar su propia versión, asegúrese de que se instala en el /usr/local subárbol (está destinado para software compilado por un administrador que es exactamente lo que estás haciendo). Entonces debería terminar con /usr/local/include/iconv.h y /usr/local/lib/libiconv.dylib.

1

Tengo exactamente el mismo problema. Mi sistema operativo recién instalado X 10.6 no tenía iconv, por lo que he descargado desde iconv http://ftp.gnu.org/gnu/libiconv/ y corrió

./configure 
make 
sudo make install 

Instalado bien, iconv.h y se libiconv.dylib donde se supone que son, pero la instalación joya rvm gem install iconv falla con los mismos errores

No tengo suficiente C-fu en mí para interpretar el problema más, pero ¿supongo que esto podría ser el resultado de algún tipo de desajuste de versión? Tal vez la gema iconv espera tener alguna versión anterior de libiconv? Me gustaría obtener una confirmación de cualquier forma con esto, antes de mezclar mi sistema con versiones aleatorias de iconv.

8

Por lo que vale la pena - Pude construir 1.9.2 p136 usando RVM y vinculo a libiconv que instalé con Homebrew. Esto me permitió usar la gema JSON sin problemas.Escribí un post rápido sobre él aquí: http://www.v25media.com/blog/read/forcing_ruby_1_9_2_via_rvm_to_use_iconv pero el quid de la cuestión es:

$ brew install libiconv 
$ rvm remove 1.9.2 
$ rvm install 1.9.2 --with-iconv-dir=/usr/local/Cellar/libiconv/1.13.1 
+2

-1, no debería necesitar volver a construir Ruby solo por esto. – user2398029

+0

@louism retoma el tema con los mantenedores de Ruby, no conmigo. –

+0

Debería haber dicho "no es necesario" ... mire las otras respuestas. – user2398029

6

En mi caso, sólo estaba instalando iconv para mecanizar por lo que podría ejecutar secuencias de comandos

ya había instalado libiconv w/brebaje

gem install iconv -- --with-iconv-dir=/usr/local/Cellar/libiconv/1.13.1

Herp derp

0

Bajo león estas dos líneas de trabajo:

cerveza instalar libiconv

enlace cerveza libiconv

-1

intenta instalar el paquete iconv RVM y vuelva a instalar ruby ​​1.9.2:

$ rvm pkg install iconv 
$ rvm reinstall 1.9.2 --with-iconv-dir=$rvm_path/usr 
0

Una combinación de las sugerencias @DarkDust y @Vee lo hacen por mí:

sudo port install libiconv 
gem install iconv -- --with-iconv-dir=/opt/local 

Puede ejecutar

port contents libiconv 

a que libiconv ahora se instala debajo /opt/local/include/ y /opt/local/include/lib. También debería mencionar que estoy usando ruby ​​1.9.3p286.

Cuestiones relacionadas