Я изучаю возможность создания привязки Clutter для языка D ( http://d-programming-language.org/) и начали с нескольких простых тестов с динамической загрузкой libclutter. Я столкнулся с проблемой, которая может быть связана с системой наследования GObject, и я был бы признателен за любую помощь в ее решении. Вот краткое изложение: использование clutter_stage_get_default возвращает ClutterActor*, который я могу использовать с методами clutter_actor_*. Но я всегда получаю ошибки или segfaults, когда использую методы clutter_stage_* или clutter_container_*. Вот мой тестовый код: http://pastebin.com/nVrQ69dU
При вызове clutter_container_add_actor в строке 56 я получаю следующую ошибку: (<unknown>:11976): Clutter-CRITICAL **: clutter_container_add_actor:
assertion 'CLUTTER_IS_CONTAINER (container)' failed
В примере кода я заметил макросы CLUTTER_STAGE и CLUTTER_CONTAINER для приведения (очевидно, они мне недоступны), но, насколько я мог судить, они просто выполняли какие-то проверки, а затем выполняли простое приведение C. Если это неверно, и перед кастингом над указателем сцены необходимо выполнить какую-то магию типа Gobject, сообщите мне об этом. Связывание и использование clutter_stage_set_title или clutter_stage_set_color с cast(ClutterStage*)stage
приводило к ошибкам сегментации, предположительно той же проблеме.
РЕДАКТИРОВАТЬ: Вот урезанный пример без внешних зависимостей (если вы не используете Linux, вам нужно будет заменить вызовы dl эквивалентами вашей ОС). Этот код завершается ошибкой сегментации, которая, согласно GDB и Valgrind, находится в clutter_stage_set_title (in /usr/lib/libclutter-glx-1.0.so.0.600.14)
.