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

问题描述:

在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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值