2010-09-01 21 views
5

Je ne parviens pas à installer la gemme 'iconv' en raison d'erreurs de construction bizarres.
J'ai compilé 'libiconv' à partir de la source et ai lié les fichiers .h et .dylib dans le répertoire include et lib de rvm. Quand je lanceEchec de la création de iconv gem sur ruby ​​1.9.2

gem install iconv 

sorties Gem erreurs de construction étranges:

construction des extensions natives. Cela peut prendre un certain temps ...

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 

Comment puis-je le faire installer et construire correctement.

Merci

+3

Ruby 1.9 inclut l'équivalent de la gemme 'iconv' par défaut. Vous ne devriez pas avoir besoin de la gemme. Les erreurs, en particulier les erreurs "no member named ...", indiquent que la gemme n'est pas compatible avec Ruby 1.9 (la plupart des structs pour les types intégrés ont bien été restructurés). –

Répondre

1

Je pense avoir découvert pourquoi! On dirait que la gemme Iconv n'est pas encore 1.9.x conforme, donc il ne sera pas construire.

3

Pourquoi/comment avez-vous construit iconv? Et plus important encore, où l'avez-vous installé? Parce que je pense que gem peut trouver le système libiconv mais ne parvient pas à trouver les en-têtes parce qu'ils ne sont pas dans les chemins de recherche normaux.

Quelques suggestions:

plus simple est sans doute d'utiliser MacPorts et installer iconv avec qui: sudo port install libiconv

Ou si vous voulez/besoin d'installer votre propre version, assurez-vous qu'il est installé dans le /usr/local sous-arbre (il est destiné aux logiciels compilés par un administrateur, ce qui est exactement ce que vous faites). Donc, vous devriez vous retrouver avec /usr/local/include/iconv.h et /usr/local/lib/libiconv.dylib.

1

J'ai exactement le même problème. Mon OS X 10.6 fraîchement installé n'a pas iconv, donc je téléchargé iconv de http://ftp.gnu.org/gnu/libiconv/ et a couru

./configure 
make 
sudo make install 

INSTALLÉ fin, iconv.h et libiconv.dylib sont là où ils sont censés être, mais l'installation de pierres précieuses rvm gem install iconv échoue avec les mêmes erreurs.

Je n'ai pas assez de C-fu en moi pour interpréter le problème plus loin, mais je suppose que cela pourrait être le résultat d'une sorte de discordance de version? Peut-être que le gem iconv s'attend à avoir une ancienne version de libiconv? Je voudrais obtenir une confirmation de toute façon avec ceci, avant que je fudge mon système avec des versions aléatoires de iconv.

8

Pour ce que ça vaut - j'ai été en mesure de construire 1.9.2 p136 en utilisant RVM et reliant à libiconv j'ai installé avec Homebrew. Cela m'a permis d'utiliser la gemme JSON sans problèmes.Je l'ai écrit à ce sujet ici un billet de blog rapide: http://www.v25media.com/blog/read/forcing_ruby_1_9_2_via_rvm_to_use_iconv mais l'essentiel de celui-ci est:

$ 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, vous ne devriez pas avoir besoin de reconstruire Ruby juste pour cela. – user2398029

+0

@louism le prend avec les mainteneurs Ruby, pas moi. –

+0

J'aurais dû dire "tu n'as pas besoin de" ... regarde les autres réponses. – user2398029

6

Dans mon cas, j'installant iconv pour mécaniser pour que je puisse exécuter le script

j'avais déjà libiconv installé w/infusion

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

Herp derp

0

Sous Lion ces deux lignes fonctionnent:

brew installer libiconv

lien brew libiconv

-1

Essayez d'installer le package RVM iconv puis réinstaller Ruby 1.9.2:

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

Une combinaison des suggestions par @DarkDust et @Vee le font pour moi:

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

Vous pouvez exécuter

port contents libiconv 

que libiconv est maintenant installé sous /opt/local/include/ et /opt/local/include/lib. Je devrais aussi mentionner que j'utilise ruby ​​1.9.3p286.