zed.0xff.me
пишем на C расширение для ruby
Это не просто, а очень просто (как два пальца об асфальт два файла написать):
1й файл: mytest.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#include "ruby.h" void Init_mytest(); VALUE method_sayhello(VALUE); VALUE mytest = Qnil; void Init_mytest() { mytest = rb_define_module("MyTest"); rb_define_method(mytest, "sayhello", method_sayhello, 0); } VALUE method_sayhello(VALUE self) { puts("Hello World!"); return Qnil; } |
2й файл: extconf.rb
1 2 3 4 |
require 'mkmf' extension_name = 'mytest' dir_config(extension_name) create_makefile(extension_name) |
запуск:
1 2 3 4 5 6 7 8 9 10 11 12 |
#ruby extconf.rb creating Makefile #make x86_64-pc-linux-gnu-gcc -shared -o mytest.so mytest.o -L. -L/usr/lib64 -Wl,-R/usr/lib64 -L. -Wl,-O1 -rdynamic -Wl,-export-dynamic -Wl,-R -Wl,/usr/lib64 -L/usr/lib64 -lruby18 -lpthread -lrt -ldl -lcrypt -lm -lc #irb irb(main):001:0> require 'mytest' => true irb(main):002:0> include MyTest => Object irb(main):003:0> sayhello Hello World! => nil |
// пример содран с Введения в расширения Ruby на C, но там всё разжевывается под винду и вижуалстудию