Не удалось собрать iconv gem на ruby ​​1.9.2 - PullRequest
5 голосов
/ 01 сентября 2010

Я не могу установить гем 'iconv' из-за странных ошибок сборки.
Я собрал 'libiconv' из исходного кода и связал .h и .dylib в каталогах include и lib rvm.Когда я запускаю

gem install iconv

Gem выводит странные ошибки сборки:

Сборка собственных расширений.Это может занять некоторое время ...

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

Как мне заставить его установить и построить правильно.

Спасибо

Ответы [ 8 ]

8 голосов
/ 30 января 2011

Для чего это стоит - я смог собрать 1.9.2 p136 с использованием RVM и связью с libiconv, который я установил с помощью Homebrew.Это позволило мне без проблем использовать гем JSON.Я написал короткую запись в блоге об этом здесь: http://www.v25media.com/blog/read/forcing_ruby_1_9_2_via_rvm_to_use_iconv, но суть этого:

$ brew install libiconv
$ rvm remove 1.9.2
$ rvm install 1.9.2 --with-iconv-dir=/usr/local/Cellar/libiconv/1.13.1
6 голосов
/ 01 марта 2011

В моем случае я просто устанавливал iconv для механизации, чтобы я мог запустить скрипт

У меня уже была установлена ​​libiconv с brew

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

herp derp

3 голосов
/ 01 сентября 2010

Почему / как вы создали iconv?И что более важно, где вы его установили?Потому что я думаю, что gem может найти систему libiconv, но не может найти заголовки, потому что они не находятся в обычных путях поиска.

Несколько предложений:

Самый простой способ - это, вероятно, использовать MacPorts и установите iconv следующим образом: sudo port install libiconv

Или, если вы хотите / хотите установить собственную версию, убедитесь, что она установлена ​​в поддереве /usr/local (оно предназначено для программного обеспечения, котороеАдминистратор скомпилировал, что именно то, что вы делаете).Таким образом, вы должны в конечном итоге с /usr/local/include/iconv.h и /usr/local/lib/libiconv.dylib.

1 голос
/ 24 сентября 2010

Я думаю, я понял, почему!Похоже, что камень Iconv еще не соответствует 1.9.x, поэтому он не будет собираться.

1 голос
/ 24 сентября 2010

У меня точно такая же проблема.У моей недавно установленной OS X 10.6 не было iconv, поэтому я загрузил iconv из http://ftp.gnu.org/gnu/libiconv/ и запустил

./configure
make
sudo make install

Установлены нормально, iconv.h и libiconv.dylib, где они 'должно быть, но установка gem rvm gem install iconv завершается неудачно с теми же ошибками.

У меня недостаточно C-fu для дальнейшей интерпретации проблемы, но я думаю, это может быть результатомкакого-то несоответствия версий?Может быть, у драгоценного камня iconv ожидается более старая версия libiconv?Я хотел бы получить какое-либо подтверждение с этой стороны, прежде чем я перешлю свою систему случайными версиями iconv.

0 голосов
/ 20 марта 2013

Комбинация предложений @DarkDust и @Vee делает это для меня:

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

Вы можете запустить

port contents libiconv

к этому libiconv теперь установлено под /opt/local/include/ и /opt/local/include/lib. Следует также упомянуть, что я использую ruby ​​1.9.3p286.

0 голосов
/ 16 марта 2012

Попробуйте установить пакет iconv rvm, а затем переустановить ruby ​​1.9.2:

$ rvm pkg install iconv
$ rvm reinstall 1.9.2 --with-iconv-dir=$rvm_path/usr
0 голосов
/ 11 декабря 2011

Под Lion работают эти две строки:

brew install libiconv

brew link libiconv

...