J'utilise une bibliothèque de physique appelée Chipmunk (version 7.0.1) pour un moteur de jeu dans Pharo Smalltalk (version 6). J'initialise un espace avec un appel à la fonction "cpSpaceNew()" et j'obtiens correctement le pointeur vers la structure cpSpace. Ensuite, je veux définir la gravité de l'espace en utilisant un appel à la fonction "cpSpaceSetGravity (espace, gravité)" et j'obtiens une erreur de segmentation. J'ai trouvé une question similaire: Segmentation fault on library call mais c'est une vieille question et je n'y ai pas trouvé de solution.Erreur de segmentation sur l'appel ffi de Pharo Smalltalk
EDIT:
Obtenir pointeur cpSpace avec:
^ self ffiCall: #(cpSpace* cpSpaceNew(void))
"ffical:" est appel natif de Smalltalk.
Essayer de définir la gravité avec:
^ (self ffiCalloutIn: thisContext sender)
convention: self ffiCallingConvention;
options: #(optIndirectCall);
function: #(void cpSpaceSetGravity (self , cpVect aVector)) module: self ffiLibraryName
Cette façon d'appel de fonction est parce qu'elle est une « fonction en ligne » et il n'est pas charger dans la bibliothèque.
sans code est ce je vous laisse deviner. Vérifiez la documentation pour vous assurer que vous l'appelez correctement. Vérifiez votre débogueur. – tadman
Mis à jour avec quelques informations, l'espoir peut aider. – Lepipi
Que voulez-vous dire par "fonction inline"? La bibliothèque fournit la fonction ou non, quelle que soit la façon dont la déclaration peut apparaître dans le code. Vous dites explicitement à l'interface FFI que vous voulez que la fonction soit recherchée dans 'self ffiLibrary'. Si la fonction n'est pas fournie par la bibliothèque, qu'espérez-vous qu'il se passe? Ce n'est pas magique ...;) –