Я пытаюсь запустить Пример физики Водена в Pharo, который включает в себя правильную компиляцию Bullet и правильную установку привязок к малым разговорам в Pharo.
Я использую Linux Mint 17 x64.
Но NativeBoost, похоже, не может загрузить скомпилированные библиотеки. Я использовал источники, предоставленные здесь:
https://github.com/ronsaldo/bullet-pharo
https://github.com/ronsaldo/swig
Я собрал модифицированную версию swig, а также библиотеки маркеров и привязки с помощью предоставленных скриптов сборки.
Я также дважды проверил, что библиотеки маркеров являются 32-битными.
Открытие примера физики Водена возвращает эту ошибку:
failed to get a symbol address:
PharoNB_new_BTDefaultCollisionConfiguration__SWIG_1
При проверке стека вызовов в отладчике оказывается, что дескриптор модуля равен 0.
Я подтвердил это, выполнив то же сообщение, что и
BulletCInterface nbLibraryNameOrHandle
выполняет:
NativeBoost forCurrentPlatform loadModule: 'BulletPharo'
Это сообщение возвращает 0. Я попытался указать полный путь к libPharoBullet.so в рабочей области, например:
NativeBoost forCurrentPlatform loadModule:
'/home/martin/.local/share/Pharo/bullet-pharo/libBulletPharo.so'
с тем же результатом. Я также проверил это с моей 32-битной системной библиотекой (liblzma), и там NativeBoost смог загрузить ее, так как он возвращал ненулевой дескриптор.
Так что я подозреваю, что во время компиляции что-то пошло не так …
Я тоже сделал
readelf -h libPharoBullet.so
и его ABI был «UNIX — GNU», в то время как ABI pharo-vm — «UNIX — System V»
Может ли это быть проблемой здесь?
Как я могу заставить ABI быть System V при компиляции? Я использую gcc 4.8.2
Или какие шаги я мог бы иначе выполнить?
Задача ещё не решена.