2010-11-05 94 views
1

我在Snow Leopard 10.6.4,Intel架构上。在Snow Leopard上安装oniguruma宝石的问题

我有RVM和Ruby 1.9.2安装:

$ rvm list 
rvm rubies 

=> ruby-1.9.2-p0 [ x86_64 ] 

我安装oniguruma5这样的:

port install oniguruma5 

然后,按照传统智慧,我试图安装oniguruma宝石像这样:

sudo gem install oniguruma -- --with-opt-dir=/opt/local 

但我得到一个编译错误:

Julie:lender bhaupt$ sudo gem install oniguruma -- --with-opt-dir=/opt/local 
Building native extensions. This could take a while... 
ERROR: Error installing oniguruma: 
ERROR: Failed to build gem native extension. 

/Users/bhaupt/.rvm/rubies/ruby-1.9.2-p0/bin/ruby extconf.rb --with-opt-dir=/opt/local 
checking for main() in -lonig... yes 
creating Makefile 

make 
gcc -I. -I/Users/bhaupt/.rvm/rubies/ruby-1.9.2-p0/include/ruby-1.9.1/x86_64-darwin10.4.0 -I/Users/bhaupt/.rvm/rubies/ruby-1.9.2-p0/include/ruby-1.9.1/ruby/backward -I/Users/bhaupt/.rvm/rubies/ruby-1.9.2-p0/include/ruby-1.9.1 -I. -I/opt/local/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -fno-common -Wall -o oregexp.o -c oregexp.c 
oregexp.c: In function ‘name_callback’: 
oregexp.c:111: warning: pointer targets in passing argument 1 of ‘strlen’ differ in signedness 
oregexp.c:111: warning: pointer targets in passing argument 1 of ‘rb_intern2’ differ in signedness 
oregexp.c:111: warning: pointer targets in passing argument 1 of ‘rb_intern’ differ in signedness 
oregexp.c: In function ‘oregexp_initialize’: 
oregexp.c:123: error: ‘struct RString’ has no member named ‘ptr’ 
oregexp.c:124: error: ‘struct RString’ has no member named ‘len’ 
oregexp.c:138: warning: pointer targets in passing argument 1 of ‘onig_error_code_to_str’ differ in signedness 
oregexp.c: In function ‘oregexp_make_match_data’: 
oregexp.c:176: warning: passing argument 2 of ‘onig_foreach_name’ from incompatible pointer type 
oregexp.c: In function ‘oregexp_match’: 
oregexp.c:211: warning: statement with no effect 
oregexp.c:215: error: ‘struct RString’ has no member named ‘ptr’ 
oregexp.c:216: error: ‘struct RString’ has no member named ‘len’ 
oregexp.c:244: warning: pointer targets in passing argument 1 of ‘onig_error_code_to_str’ differ in signedness 
oregexp.c: In function ‘oregexp_append_replacement’: 
oregexp.c:267: error: ‘struct RString’ has no member named ‘len’ 
oregexp.c:268: error: ‘struct RString’ has no member named ‘ptr’ 
oregexp.c:277: error: ‘struct RString’ has no member named ‘ptr’ 
oregexp.c:278: error: ‘struct RString’ has no member named ‘len’ 
oregexp.c:286: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘OnigCodePoint’ 
oregexp.c:293: warning: pointer targets in passing argument 2 of ‘rb_str_buf_cat’ differ in signedness 
oregexp.c:297: warning: pointer targets in passing argument 2 of ‘rb_str_buf_cat’ differ in signedness 
oregexp.c:328: warning: pointer targets in passing argument 2 of ‘rb_str_buf_cat’ differ in signedness 
oregexp.c:332: warning: pointer targets in passing argument 2 of ‘rb_str_buf_cat’ differ in signedness 
oregexp.c:336: warning: pointer targets in passing argument 2 of ‘rb_str_buf_cat’ differ in signedness 
oregexp.c:341: warning: pointer targets in passing argument 2 of ‘rb_str_buf_cat’ differ in signedness 
oregexp.c:350: warning: pointer targets in passing argument 2 of ‘rb_str_buf_cat’ differ in signedness 
oregexp.c:371: warning: pointer targets in passing argument 2 of ‘rb_str_buf_cat’ differ in signedness 
oregexp.c:379: warning: pointer targets in passing argument 2 of ‘rb_str_buf_cat’ differ in signedness 
oregexp.c:385: warning: pointer targets in passing argument 2 of ‘rb_str_buf_cat’ differ in signedness 
oregexp.c:392: warning: pointer targets in passing argument 2 of ‘rb_str_buf_cat’ differ in signedness 
oregexp.c: In function ‘str_mod_check’: 
oregexp.c:405: error: ‘struct RString’ has no member named ‘ptr’ 
oregexp.c:405: error: ‘struct RString’ has no member named ‘len’ 
oregexp.c: In function ‘oregexp_gsub’: 
oregexp.c:444: error: ‘struct RString’ has no member named ‘ptr’ 
oregexp.c:445: error: ‘struct RString’ has no member named ‘len’ 
oregexp.c:462: warning: pointer targets in passing argument 2 of ‘rb_str_buf_cat’ differ in signedness 
oregexp.c:484: warning: pointer targets in passing argument 2 of ‘rb_str_buf_cat’ differ in signedness 
oregexp.c:491: warning: pointer targets in passing argument 2 of ‘rb_str_buf_cat’ differ in signedness 
oregexp.c: In function ‘oregexp_safe_gsub’: 
oregexp.c:527: warning: passing argument 3 of ‘rb_ensure’ from incompatible pointer type 
oregexp.c: In function ‘oregexp_scan’: 
oregexp.c:614: error: ‘struct RString’ has no member named ‘ptr’ 
oregexp.c:615: error: ‘struct RString’ has no member named ‘len’ 
oregexp.c: In function ‘oregexp_m_scan’: 
oregexp.c:671: warning: passing argument 3 of ‘rb_ensure’ from incompatible pointer type 
make: *** [oregexp.o] Error 1 


Gem files will remain installed in /Users/bhaupt/.rvm/gems/ruby-1.9.2-p0/gems/oniguruma-1.1.0 for inspection. 
Results logged to /Users/bhaupt/.rvm/gems/ruby-1.9.2-p0/gems/oniguruma-1.1.0/ext/gem_make.out 

想法?

我已经证实,/opt/local/include包含oniggnu.honigposix.h,并oniguruma.h

+0

嘿鲍勃,护理缩进错误消息,以便将其呈现为预格式化文本? – 2010-12-31 01:23:34

+1

“'sudo gem install oniguruma'”。您正在使用RVM:请参阅[请勿使用sudo ...](http://rvm.beginrescueend.com/rubies/rubygems/)。 – 2011-01-07 07:39:13

回答

0

Oniguruma利用紫外线,Ultraviolet用途,Textpow,你会用泰诺获得所有这些依赖一字排开。

一旦你得到所有的依赖一字排开确保您包括与config.gem 'oniguruma', :lib => 'ultraviolet'

紫外线的图书馆中,我会加倍后检查库,我另一台计算机上,但不包括这是我的问题。

+0

如果我恢复做这个红宝石1.8.7: – 2010-11-05 04:09:59

+0

RVM系统 然后安装oniguruma宝石: sudo的创业板安装oniguruma - --with-OPT-DIR = /选择/本地 编译成功。所以它必须是关于rvm和ruby 1.9.2的。 – 2010-11-05 04:11:21

+0

它也可能与安装了RVM的ruby使用sudo绑定。 RVM默认安装在〜/ .rvm沙箱中,并警告我们不要*使用sudo。请参阅[RVM不能与sudo一起使用ruby](http://stackoverflow.com/questions/3644897/rvm-cannot-use-ruby-with-sudo)和[使用rvm安装gems](http://stackoverflow.com/ questions/3853489/installed-gems-using-rvm) – 2010-11-05 14:03:22

1

(我有同样的问题,当我尝试用Ruby 1.9上安装Debian oniguruma-红宝石。)

所以,http://oniguruma.rubyforge.org/说:

This library provides bindings to Oniguruma, a regular expression library which is standard with Ruby 1.9. It allows users of Ruby 1.8 to access the extended functionality without the need to recompile or to upgrade Ruby.

这听起来不像oniguruma- ruby可以安装在1.9上。对于Dizan(我向其发送了一个指向这个问题的指针)的问题:但即使Oniguruma在Ruby 1.9中是标准的,如果我想运行一个具有require 'origuruma'的模块,我仍然需要使用origuruma-ruby , 对?所以让它与Ruby 1.9兼容还是有道理的,因为没有其他方法可以获得运行在Ruby 1.9上的Textpow或Ultraviolet--或者我错过了什么?

+1

这是正确的:OP正试图安装已经包含在Ruby 1.9中的Oniguruma。你不需要重新安装它。 – 2010-12-31 01:40:11

+0

谢谢澄清!通过“包含”,我假定你的意思是Ruby 1.9使用Oniguruma库匹配正则表达式,对吧?但是,'需要'oniguruma''应该做什么模块?我猜Ruby 1.9可能会使用oniguruma绑定在功能上是不必要的(因为它具有内置的所有Oniguruma特性[如命名组?]),但是如果您的代码需要在1.8和1.9之间运行,那么您处于有点麻烦,不? – 2010-12-31 17:02:52

2

我是Dizan,oniguruma和紫外线的主要开发商,抱歉花了这么长的时间来回答这个问题!

正如Jo Liss所言,oniguruma绑定的目的是提供对Ruby 1.9现在标准的一些高级正则表达式功能的访问。所以,原则上1.9就不需要这个了。

编译1.9的oniguruma绑定,它是完全未经测试的,所以你或多或少都是自己的,但原则上,在1.9中使用标准正则表达式很容易修补紫外线和textpow。当然,这是在我的待办事项列表中,但不幸的是,现在我几乎没有时间。另一方面,有些人表示有兴趣分叉或接管项目,这会让事情变得更快。我会保持你在这张贴。

最后一个替代方法是自己做补丁这是不一样艰巨的,因为它的声音:据我记得,你所要做的就是通过标准Regexp#new全部更换调用ORegexp#new,如果你决定以这种方式,我会很乐意提供帮助,将您的补丁包含在下一版的紫外/ textpow中。

0

我有同样的错误,但我想

sudo port install oniguruma 

,结果被告知

Error: Target org.macports.fetch returned: 

     Please use either 
      oniguruma4 (for ruby support) 
     or 
      oniguruma5 (for unicode support) 

,因为我是试图建立一个红宝石的宝石,我安装的,而不是oniguruma5 oniguruma4 。已经这样做了,安装干净,除了一个警告宝石而生成的文档(无定义oregexp_initialize)

4

我的解决方案是最简单的(如果你是一个Mac用户):

brew install oniguruma