2013-07-19 2 views
0

Я изучаю, как писать расширения Ruby C, и я прохожу мимо простейших примеров. Я пытался добиться чего-то с сокетами, поэтому я попытался создать расширение, которое определит класс под rb_cIPSocket.Возможно ли использовать rb_cIPSocket в расширении ruby ​​C

В верхней части моего файла C У меня есть:

#include "rubysocket.h" 

И я получаю:

...s.c:3:31: error: rubysocket.h: No such file or directory 

Что наиболее вероятно, так. Тем не менее, я перепробовал все возможные пути:

#include "rubysocket.h" 
#include "socket/rubysocket.h" 
#include "ext/socket/rubysocket.h" 
#include <rubysocket.h> 
#include <socket/rubysocket.h> 
#include <ext/socket/rubysocket.h> 

И это мой extconf.rb:

require 'mkmf' 
dir_config("my_ext") 
have_library("c", "main") 
create_makefile("my_ext") 

И так далее. Что мне здесь не хватает? Почему я не могу включить этот заголовочный файл? Я использую OSX с RVM и Ruby 1.9.3-p448. Спасибо.

ответ

3

где работает rubysocket.h? Если это в самом сердце исходного кода рубина, то шансы это «частный» для Ruby, но вы можете посмотреть его как ...

VALUE ipSocketClass = rb_const_get («IPSocket»);

или тому подобное. GL!

+1

Благодарим за указатель. Это сделало трюк для меня: 'ipSocketClass = rb_const_get (rb_cObject, rb_intern (" IPSocket "));' – radekg

+0

Вот более продвинутый ресурс: http://clalance.blogspot.be/2011/01/writing-ruby-extensions-in -c-part-3.html – radekg

+0

И вот лучший ресурс, поэтому кажется: http://media.pragprog.com/titles/ruby3/ext_ruby.pdf – radekg

Смежные вопросы