Pharo Smalltalk ffi调用的分段错误

时间:2017-07-10 02:12:21

标签: c++ segmentation-fault smalltalk pharo chipmunk

我在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

这种函数调用方式是因为它是一个“内联函数”,并且它没有在库中加载。

1 个答案:

答案 0 :(得分:1)

您使用的是哪个gcc版本?我建议使用旧的或古老的。

摘自Pharo邮件列表:

  

我的理解是gcc 4.8(.4)是可靠的默认版本,   所以,如果有人想用相同的编译器构建VM,   他们需要gcc 4.8。

     

目前需要它,因为有几个人发现了VM   如果使用gcc 5.4

编译,则无法正常工作