Ruby 1.9.2 и pcap gem? Ошибка компиляции - PullRequest
2 голосов
/ 30 марта 2011

У меня проблемы с установкой pcap gem с ruby ​​1.9.2 ... Работает нормально с 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:~$ 

Ответы [ 2 ]

2 голосов
/ 30 мая 2011

Два простых шага поиска и замены ...

Заменить RSTRING (foo) -> ptr на RSTRING_PTR (foo).

Заменить RSTRING) foo) -> len на RSTRING_LEN (foo).

Похоже, что вы можете пока игнорировать предупреждения, хотя они могут сломаться в более новой версии ruby.

Редактировать: заставить его работать, это другая история.Большую часть выходных я провел, прослеживая это до самого расширения ruby-c и некоторых поддельных вызовов, чтобы перехватывать любые прерывания и блокировать навсегда.Исходя из того, как я понимаю, это работает на OS X, дополнительная блокировка не требуется.Надеюсь, это скоро появится в жемчужине, но пока вы можете получить рабочую версию с этой учетной записи github здесь

0 голосов
/ 30 марта 2011

http://rubygems.org/gems/pcap, вероятно, просто несовместимо с 1.9

Похоже, что этот проект больше не поддерживается.

Возможно, http://rubygems.org/gems/pcaprub будет работать лучшедля тебя.

...