2013-07-19 51 views
0

我正在學習如何編寫Ruby C擴展,我已經超越了最簡單的例子。我試圖用套接字來實現某些功能,所以我試圖創建一個擴展名,它將定義一個rb_cIPSocket下的類。是否有可能在ruby C擴展中使用rb_cIPSocket

在我的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") 

等。我在這裏錯過了什麼?爲什麼我不能包含該頭文件? 我使用的是RVM和Ruby 1.9.3-p448的OSX。 謝謝。

回答

3

ruby​​socket.h在哪裏住?如果它在Ruby的源代碼的心臟,然後賠率是它是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

相關問題