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
関数呼び出しのこの方法です。
これは誰の推測です。ドキュメントをチェックして、正しく呼び出していることを確認してください。デバッガを確認してください。 – tadman
いくつかの情報で更新されました。 – Lepipi
「インライン関数」とはどういう意味ですか?宣言がコード内でどのように見えるかにかかわらず、ライブラリは関数を提供するか、提供しません。 FFIインターフェイスに、関数を 'self ffiLibrary'で検索させることを明示しています。関数がライブラリによって提供されていない場合、何が起こると思いますか?それは魔法ではない...;) –