2010-09-01 13 views
5

Nie mogę zainstalować klejnotu iconv z powodu dziwnych błędów kompilacji.
Mam zbudować "libiconv" ze źródła i połączyłem .h i .dylib z katalogiem include i lib rvm. Kiedy uruchamiamNie można zbudować klejnotu iconv na rubinie 1.9.2

gem install iconv 

wyjść Gem dziwne błędy produkcji:

budowlane rodzimych rozszerzeń. To może chwilę potrwać ...

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 

Jak sprawić, aby był poprawnie instalowany i kompilowany.

Dzięki

+3

Ruby 1.9 zawiera domyślnie odpowiednik klejnotu 'iconv'. Nie powinieneś potrzebować klejnotu. Błędy, zwłaszcza błędy "no member named ...", wskazują, że gem nie jest zgodny z Ruby 1.9 (wiele struktur dla wbudowanych typów zostało, no, zrestrukturyzowanych). –

Odpowiedz

1

Myślę, że dowiedziałem się, dlaczego! Wygląda na to, że klejnot Iconv nie jest jeszcze zgodny z 1.9.x, więc nie będzie budowany.

3

Dlaczego/jak zbudowałeś iconv? I co ważniejsze, gdzie go zainstalowałeś? Ponieważ myślę, że gem może znaleźć system libiconv, ale nie może znaleźć nagłówków, ponieważ nie znajdują się one w normalnych ścieżkach wyszukiwania.

Kilka sugestii:

Najprostszym sposobem jest prawdopodobnie używać MacPorts i zainstalować iconv z tym: sudo port install libiconv

Lub jeśli chcesz/potrzebujesz zainstalować własną wersję, upewnij się, że zostanie zainstalowany w /usr/local poddrzewo (jest przeznaczone dla oprogramowania skompilowanego przez administratora, co jest dokładnie tym, co robisz). Więc powinieneś skończyć z /usr/local/include/iconv.h i /usr/local/lib/libiconv.dylib.

1

Mam dokładnie ten sam problem. Mój świeżo zainstalowany OS X 10.6 nie mają iconv, więc pobrałem iconv z http://ftp.gnu.org/gnu/libiconv/ i pobiegł

./configure 
make 
sudo make install 

Zainstalowane w porządku, iconv.h i libiconv.dylib są gdzie oni mają być, ale instalacja gem rvm gem install iconv zawiedzie z tymi samymi błędami.

Nie mam wystarczająco dużo C-fu, aby zinterpretować problem dalej, ale zgaduję, że może to być wynikiem niedopasowania wersji? Może klejnot iconv spodziewa się mieć starszą wersję libiconv? Chciałbym uzyskać jakieś potwierdzenie w ten sposób, zanim skruszę system za pomocą losowych wersji iconv.

8

Za to, co warto - udało mi się zbudować 1.9.2 p136 za pomocą RVM i połączyć z libiconv I zainstalowanym z Homebrew. To pozwoliło mi bez problemu korzystać z klejnotu JSON.Napisałem krótki wpis na blogu o tym tutaj: http://www.v25media.com/blog/read/forcing_ruby_1_9_2_via_rvm_to_use_iconv ale sedno jest to:

$ 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, nie powinieneś potrzebować odbudować Rubiego tylko po to. – user2398029

+0

@louism podjąć z opiekunami Ruby, nie ja. –

+0

Powinienem był powiedzieć "nie musisz" ... spójrz na inne odpowiedzi. – user2398029

6

W moim przypadku właśnie instalowanie iconv dla mechanize więc mogłem uruchomić skrypt

miałem już libiconv zainstalowany w/napar

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

herp Derp

0

Pod Lwem te dwie linie działa:

napar zainstalować libiconv

Link napar libiconv

-1

próby zainstalowania pakietu iconv RVM, a następnie ponownie zainstalować Ruby 1.9.2:

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

Połączenie sugestii przez @DarkDust i @Vee to dla mnie:

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

można uruchomić

port contents libiconv 

tej libiconv został zainstalowany pod /opt/local/include/ i /opt/local/include/lib. Powinienem też wspomnieć, że używam ruby ​​1.9.3p286.

Powiązane problemy