安装RubyCocoa遇函数调用参数错误,求解决方法
修复RubyCocoa编译时的OverrideMixin.m参数错误
我看你在编译RubyCocoa时碰到了两个参数不匹配的编译错误,这是因为编译器没法正确推断super_imp返回的函数指针参数类型,导致调用时参数数量不匹配。咱们直接修改代码就能解决问题:
第一步:定位错误代码
打开rubycocoa/ext/rubycocoa/OverrideMixin.m文件,找到你提到的这两个函数:imp_methodSignatureForSelector和imp_forwardInvocation。
第二步:修改函数调用的类型转换
针对
imp_methodSignatureForSelector里的调用:
原代码:ret = (*simp)(rcv, method, arg0);修改为:
ret = ((id (*)(id, SEL, SEL))simp)(rcv, method, arg0);这里我们显式把
simp转换成了接受id、SEL、SEL三个参数并返回id的函数指针类型,让编译器能正确识别参数数量。针对
imp_forwardInvocation里的调用:
原代码:(*simp)(rcv, method, arg0);修改为:
((id (*)(id, SEL, NSInvocation*))simp)(rcv, method, arg0);同理,这里把
simp转换成了对应imp_forwardInvocation参数类型的函数指针。
第三步:重新编译
保存修改后,回到终端重新执行:
rake
这样应该就能绕过这两个参数不匹配的错误,继续完成RubyCocoa的编译了。
内容的提问来源于stack exchange,提问作者Koichiro Eto
相关产品推荐
相关产品推荐

