我在Pharo Smalltalk(版本6)中使用名为Chipmunk(版本7.0.1)的物理库作为游戏引擎。 我通过调用函数“cpSpaceNew()”初始化一个Space,我正确地获得了指向cpSpace结构的指针。然后我想通过调用函数“cpSpaceSetGravity(space,gravity)”将重力设置到空间,然后我得到一个分段错误。 我发现了一个类似的问题:Segmentation fault on library call 但这是老问题,并没有在那里找到解决方案。
修改
获取cpSpace指针:
^ self ffiCall: #( cpSpace* cpSpaceNew(void) )
“ffical:”是来自Smalltalk的本地电话。
尝试使用以下方式设置重力:
^ (self ffiCalloutIn: thisContext sender)
convention: self ffiCallingConvention;
options: #( optIndirectCall );
function: #(void cpSpaceSetGravity (self , cpVect aVector)) module: self ffiLibraryName
这种函数调用方式是因为它是一个“内联函数”,并且它没有在库中加载。
答案 0 :(得分:1)
您使用的是哪个gcc版本?我建议使用旧的或古老的。
摘自Pharo邮件列表:
我的理解是gcc 4.8(.4)是可靠的默认版本, 所以,如果有人想用相同的编译器构建VM, 他们需要gcc 4.8。
目前需要它,因为有几个人发现了VM 如果使用gcc 5.4
编译,则无法正常工作