编译c语言程序扩展ruby


环境: windows 10 64bit ruby 2.2.4p230 (2015-12-16 revision 53155) [i386-mingw32] gcc version 4.8.1 (GCC)   minGw的配置:   //家目录   //C头文件目录    

//C++头文件目录

CPLUS_INCLUDE_PATH=%MINGW_PATH%/include/c++/4.8.1;%MINGW_PATH%/include/c++/4.8.1/mingw32;%MINGW_PATH%/include/c++/4.8.1/backward

由于本次测试是用c语言写的扩展 所以不需要配置c++

  //可执行程序目录 Path中:   注意mingw的bin下面不叫make 而叫 mingw32-make。需要自己动手改一下   正常情况下ruby生成的makefile 直接make会报各种异常   http://stackoverflow.com/questions/36983242/error-on-create-a-ruby-extension-in-c/37007688#37007688 奶奶的发了好几天没人理我,无奈只有自己研究了。   异常的原因是:makefile的部分路径地址不对 需要自己手动修改
d:/RailsInstaller/Ruby2.2.0/include/ruby-2.2.0/ruby/win32.h:319:44: warning:'st
 extern int clock_gettime(clockid_t, struct timespec *);
                                            ^
d:/RailsInstaller/Ruby2.2.0/include/ruby-2.2.0/ruby/win32.h:320:43: warning: 'st
 externint clock_getres(clockid_t,struct timespec *);
这种错是因为 D:\RailsInstaller\Ruby2.2.0\include\ruby-2.2.0\ruby\win32.h 的 timespec 没有事先定义 在第225行加入 struct timespec; 就可以了  
process_begin:CreateProcess(NULL, rm -f mytest.so,...) failed.
make (e=2):Makefile:271: recipe for target 'mytest.so' fail
这个错是因为 makefile 里面多加了一个 process 来删除so文件。这里我将它去掉就正常了 (make -d 可以观察到哪一步出错)   ok!。接下来测试在ruby中是否能调用成功呢?   到此在windows环境下完美搞定!