Ruby 1.9.2和pcap gem? 编译错误

我在使用ruby 1.9.2安装pcap gem时遇到问题…它在1.8.7下工作正常。 有谁知道发生了什么?

wuntee@wuntee:~$ rvm use system Now using system ruby. wuntee@wuntee:~$ ruby -v ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0] wuntee@wuntee:~$ gem install pcap WARNING: Installing to ~/.gem since /Library/Ruby/Gems/1.8 and /usr/bin aren't both writable. WARNING: You don't have /Users/wuntee/.gem/ruby/1.8/bin in your PATH, gem executables will not run. Building native extensions. This could take a while... Successfully installed pcap-0.7.0 1 gem installed Installing ri documentation for pcap-0.7.0... Installing RDoc documentation for pcap-0.7.0... wuntee@wuntee:~$ rvm use 1.9.2 Using /Users/wuntee/.rvm/gems/ruby-1.9.2-p180 wuntee@wuntee:~$ ruby -v ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-darwin10.6.0] wuntee@wuntee:~$ gem install pcap Building native extensions. This could take a while... ERROR: Error installing pcap: ERROR: Failed to build gem native extension. /Users/wuntee/.rvm/rubies/ruby-1.9.2-p180/bin/ruby extconf.rb checking for socket() in -lsocket... no checking for gethostbyname() in -lxnet... no checking for hstrerror()... yes checking for pcap.h... yes checking for pcap_open_live() in -lpcap... yes checking for pcap_compile_nopcap()... yes creating Makefile make gcc -I. -I/Users/wuntee/.rvm/rubies/ruby-1.9.2-p180/include/ruby-1.9.1/x86_64-darwin10.6.0 -I/Users/wuntee/.rvm/rubies/ruby-1.9.2-p180/include/ruby-1.9.1/ruby/backward -I/Users/wuntee/.rvm/rubies/ruby-1.9.2-p180/include/ruby-1.9.1 -I. -DHAVE_HSTRERROR -DHAVE_PCAP_H -DHAVE_PCAP_COMPILE_NOPCAP -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -fno-common -I/usr/local/include -o icmp_packet.o -c icmp_packet.c gcc -I. -I/Users/wuntee/.rvm/rubies/ruby-1.9.2-p180/include/ruby-1.9.1/x86_64-darwin10.6.0 -I/Users/wuntee/.rvm/rubies/ruby-1.9.2-p180/include/ruby-1.9.1/ruby/backward -I/Users/wuntee/.rvm/rubies/ruby-1.9.2-p180/include/ruby-1.9.1 -I. -DHAVE_HSTRERROR -DHAVE_PCAP_H -DHAVE_PCAP_COMPILE_NOPCAP -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -fno-common -I/usr/local/include -o ip_packet.o -c ip_packet.c ip_packet.c: In function 'ipp_set_src': ip_packet.c:117: error: 'struct RString' has no member named 'ptr' ip_packet.c: In function 'ipp_set_dst': ip_packet.c:118: error: 'struct RString' has no member named 'ptr' ip_packet.c: In function 'new_ipaddr': ip_packet.c:186: warning: cast to pointer from integer of different size ip_packet.c: In function 'ipaddr_s_new': ip_packet.c:203: error: 'struct RString' has no member named 'ptr' ip_packet.c:213: warning: format not a string literal and no format arguments ip_packet.c: In function 'ipaddr_s_load': ip_packet.c:320: error: 'struct RString' has no member named 'len' ip_packet.c:324: error: 'struct RString' has no member named 'ptr' make: *** [ip_packet.o] Error 1 Gem files will remain installed in /Users/wuntee/.rvm/gems/ruby-1.9.2-p180/gems/pcap-0.7.0 for inspection. Results logged to /Users/wuntee/.rvm/gems/ruby-1.9.2-p180/gems/pcap-0.7.0/ext/gem_make.out wuntee@wuntee:~$ 

两个简单的查找和替换步骤…

用RSTRING_PTR(foo)替换RSTRING(foo) – > ptr。

用RSTRING_LEN(foo)替换RSTRING)foo) – > len。

好像你现在可以忽略这些警告,虽然它可能会在较新版本的ruby中破坏。

编辑:让它实际工作是一个不同的故事。 我花了周末的大部分时间将其追溯到ruby-c扩展本身,并且一些虚假的调用会捕获任何中断并永久阻塞。 根据我对OS X的理解,不应该要求额外的阻塞。 希望这很快会进入gem,但在此期间你可以从这个github帐户获得工作版本

http://rubygems.org/gems/pcap可能与1.9不兼容

似乎该项目不再维护。

也许http://rubygems.org/gems/pcaprub会更好地为您服务。