2017-07-10 3 views
0

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.

+0

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

+0

Mis à jour avec quelques informations, l'espoir peut aider. – Lepipi

+0

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 ...;) –

Répondre

1

Quelle version de gcc utilisez-vous? Je recommande d'utiliser plus vieux ou peut-être un ancien.

Extrait de la liste de diffusion Pharo:

Ma compréhension est que gcc 4.8 (0,4) est la version par défaut de confiance, donc si quelqu'un d'autre veut construire la machine virtuelle avec le même compilateur, ils J'aurai besoin de gcc 4.8.

Au moment où il est nécessaire parce que quelques personnes ont constaté que la machine virtuelle ne fonctionne pas correctement si compilé avec gcc 5.4