由于奇怪的构建错误,我无法安装'iconv'宝石 我从源代码构建了'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
如何正确安装和构建。
由于
答案 0 :(得分: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
答案 1 :(得分:6)
在我的情况下,我只是为mechanize安装iconv所以我可以运行脚本
我已经安装了libiconv w / brew
gem install iconv -- --with-iconv-dir=/usr/local/Cellar/libiconv/1.13.1
herp derp
答案 2 :(得分:3)
为什么/如何构建iconv?更重要的是,你在哪里安装它?因为我认为gem可以找到系统libiconv但无法找到标题,因为它们不在正常的搜索路径中。
一些建议:
最简单的方法可能是使用MacPorts并安装iconv:sudo port install libiconv
或者,如果您需要/需要安装自己的版本,请确保它安装在/usr/local
子树中(它适用于管理员编译的软件,这正是您正在做的事情)。因此,您最终应该使用/usr/local/include/iconv.h
和/usr/local/lib/libiconv.dylib
。
答案 3 :(得分:1)
我有完全相同的问题。我新安装的OS X 10.6没有iconv
,所以我从http://ftp.gnu.org/gnu/libiconv/下载了iconv并运行了
./configure
make
sudo make install
安装正常,iconv.h和libiconv.dylib是它们应该的位置,但是gem安装rvm gem install iconv
失败并出现相同的错误。
我没有足够的C-fu来解释这个问题,但我猜这可能是某种版本不匹配的结果?也许iconv
gem希望有一些旧版本的libiconv
?在使用iconv
的随机版本来推动我的系统之前,我想以这种方式得到一些确认。
答案 4 :(得分:1)
我想我已经找到了原因! 看起来Iconv gem还不符合1.9.x标准,所以它不会构建。
答案 5 :(得分:0)
在Lion下,这两行有效:
brew install libiconv
brew链接libiconv
答案 6 :(得分:0)
@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。
答案 7 :(得分:-1)
尝试安装iconv rvm软件包,然后重新安装ruby 1.9.2:
$ rvm pkg install iconv
$ rvm reinstall 1.9.2 --with-iconv-dir=$rvm_path/usr