2017-07-10 9 views
0

Pharo Smalltalk(バージョン6)のゲームエンジン用にChipmunk(バージョン7.0.1)と呼ばれる物理ライブラリを使用しています。 関数 "cpSpaceNew()"の呼び出しでSpaceを初期化し、ポインタをcpSpace構造体に正しく取得しています。次に、関数 "cpSpaceSetGravity(space、gravity)"への呼び出しを使用して空間に重力を設定したいと思い、Segmentation Faultを取得します。 私は同様の質問を見つけました:Segmentation fault on library call それは古い質問で、解決策が見つかりませんでした。Pharo Smalltalkからのffi呼び出しでのセグメンテーションフォルト

EDIT:

取得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

これは誰の推測です。ドキュメントをチェックして、正しく呼び出していることを確認してください。デバッガを確認してください。 – tadman

+0

いくつかの情報で更新されました。 – Lepipi

+0

「インライン関数」とはどういう意味ですか?宣言がコード内でどのように見えるかにかかわらず、ライブラリは関数を提供するか、提供しません。 FFIインターフェイスに、関数を 'self ffiLibrary'で検索させることを明示しています。関数がライブラリによって提供されていない場合、何が起こると思いますか?それは魔法ではない...;) –

答えて

1

どのgccバージョンをお使いですか?私は古代か古代のものを使用することをお勧めします。

ファロメーリングリストからの抜粋:

誰にも同じコンパイラとVMを構築したい場合は私の理解ではそう、GCC 4.8(0.4)は信頼できるのデフォルトのバージョンであること あり、 彼らはgcc 4.8が必要です。それは少数の人々はgccでコンパイルされた場合、VM が正常に動作しないことを発見したので、必要とされている瞬間

はコードなしで5.4

関連する問題