5

奇妙なビルドエラーのため、「iconv」gemをインストールできません。
ソースから「libiconv」をビルドし、.hと.dylibをrvmのincludeおよびlibディレクトリにリンクしました。私が走るとき

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

正しくインストールしてビルドするにはどうすればよいですか。

ありがとう

4

8 に答える 8

8

それだけの価値があります-RVMを使用して1.9.2 p136をビルドし、Homebrewでインストールしたlibiconvにリンクすることができました。これにより、JSON gem を問題なく使用できました。ここで簡単なブログ投稿を書きました: 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
于 2011-01-30T20:22:02.820 に答える
6

私の場合、スクリプトを実行できるようにmechanizeのiconvをインストールしていました

私はすでにbrewでlibiconvをインストールしました

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

ヘルプダープ

于 2011-02-28T23:36:34.267 に答える
3

なぜ/どのように iconv を構築したのですか? さらに重要なことに、どこにインストールしましたか? gem はシステム libiconv を見つけることができると思いますが、通常の検索パスにないため、ヘッダーを見つけることができません。

いくつかの提案:

最も簡単な方法は、おそらくMacPortsを使用して iconv をインストールすることです。sudo port install libiconv

または、独自のバージョンをインストールする必要がある場合は、それが/usr/localサブツリーにインストールされていることを確認してください(管理者がコンパイルしたソフトウェアを対象としており、まさにあなたが行っていることです)。したがって、最終的に/usr/local/include/iconv.handになるはず/usr/local/lib/libiconv.dylibです。

于 2010-09-01T08:24:40.340 に答える
1

私はまったく同じ問題を抱えています。新しくインストールした OS X 10.6 には がなかったので、 http:iconv //ftp.gnu.org/gnu/libiconv/ から iconv をダウンロードして実行しました

./configure
make
sudo make install

正常にインストールされ、iconv.h と libiconv.dylib は本来あるべき場所にありますが、gem のインストールrvm gem install iconvは同じエラーで失敗します。

問題をこれ以上解釈するのに十分な C-fu がありませんが、これは何らかのバージョンの不一致の結果であると思いますか? たぶん、iconv宝石は古いバージョンのlibiconv? システムをランダムなバージョンのiconv.

于 2010-09-24T10:13:37.743 に答える
1

理由がわかったと思います!Iconv gem はまだ 1.9.x に準拠していないように見えるため、ビルドされません。

于 2010-09-24T12:12:13.900 に答える
0

Lion では、次の 2 行が機能します。

brew install libiconv

醸造リンク libiconv

于 2011-12-11T09:08:53.457 に答える
0

@DarkDust と @Vee による提案の組み合わせは、私のためにそれを行います。

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

実行できます

port contents libiconv

との下にlibiconvインストールされます。また、Ruby 1.9.3p286 を使用していることにも言及する必要があります。/opt/local/include//opt/local/include/lib

于 2013-03-20T17:33:11.910 に答える
-1

iconv rvm パッケージをインストールしてから、ruby 1.9.2 を再インストールしてみてください。

$ rvm pkg install iconv
$ rvm reinstall 1.9.2 --with-iconv-dir=$rvm_path/usr
于 2012-03-16T07:58:07.523 に答える