Ошибка сегментации при вызове ffi от Pharo Smalltalk

Я использую физическую библиотеку под названием Chipmunk (версия 7.0.1) для игрового движка в Pharo Smalltalk (версия 6).
Я инициализирую Space с помощью вызова функции «cpSpaceNew ()» и правильно получаю указатель на структуру cpSpace. Затем я хочу установить гравитацию в пространстве, используя вызов функции «cpSpaceSetGravity (space, gravity)», и я получаю ошибку сегментации.
Я нашел похожий вопрос: Ошибка сегментации при вызове библиотеки
но это старый вопрос и не нашел там решения.

РЕДАКТИРОВАТЬ:

Получение указателя 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

Решение

Какую версию GCC вы используете? Я рекомендую использовать более старый или, возможно, древний.

Выдержка из списка рассылки Pharo:

Насколько я понимаю, gcc 4.8 (.4) является верной версией по умолчанию,
так что если кто-то еще хочет собрать виртуальную машину с тем же компилятором,
им понадобится gcc 4.8.

На данный момент это необходимо, потому что несколько человек обнаружили, что виртуальная машина
не работает должным образом, если скомпилировано с gcc 5.4

1

Другие решения

Других решений пока нет …