CRuby作为嵌入式脚本语言fclose()错误的妥协方案

来源:互联网 发布:微信扫码群发营销软件 编辑:程序博客网 时间:2024/06/01 12:52

问题描述:

在Windows下面使用Ruby(CRuby)作为嵌入式脚本语言时,使用fclose会出问题。

问题原因:

在win32.h头文件中定义了 

#define fclose(f)rb_w32_fclose(f)

使fclose重定向到了rb_w32_fclose

表现状况:

动态链接编译正常, 一旦使用fclose(C++ fsteam里面close也会调用),程序异常

静态链接提示fclose与默认库冲突

原因探究:

不知道为什么一句宏定义会生成一条函数,还能被导出,看来对C/C++了解还是太少了。那句宏有个条件,就是

#ifdef RUBY_EXPORT

这个在Ruby\Win32\下有个makefile.sub文件,250行左右(请搜索)有行

-DRUBY_EXPORT

就是cl的宏定义, 定义RUBY_EXPORT,但是去掉之后本机编译失败。

在网上搜索了一个,国外也有这样的问题(但是只有几例):

0.Ruby为什么会常试定义fclose这个东西

1.定义也就算了,还不对称: fopen没有定义 _wfopen没有定义

但是使用官方提供的文件(windows版只给到1.9X),没有fclose问题,看来是编译的方式不对,在正确方法解决前只能常试下面的妥协方案,

有人知道正确的方法请联系一下笔者,感谢

妥协方案:

在win32.h(ruby\include\ruby下)

#define fclose(f)rb_w32_fclose(f)

换成

#define fclose(f)fclose(f)

这样就不会导出fclose函数了。不过修改了文件,请注意Ruby的License

0 0
原创粉丝点击