Задать вопрос
@Afvkbl

Как выполнить интеграцию SWIG и Ogre3d?

У меня есть следующий класс:
#include <OGRE/OgreRoot.h>
#include <OGRE/OgreConfigFile.h>
#include <OGRE/OgreCamera.h>
#include <OGRE/OgreViewport.h>
#include <OGRE/OgreSceneManager.h>
#include <OGRE/OgreRenderWindow.h>
#include <OGRE/OgreEntity.h>
#include <OGRE/OgreWindowEventUtilities.h>

#include <OISEvents.h>
#include <OISInputManager.h>
#include <OISKeyboard.h>
#include <OISMouse.h>

class OgreApplication : public Ogre::WindowEventListener, public Ogre::FrameListener
{
 public:
   OgreApplication();
   ~OgreApplication();
   bool go();
 protected:
   virtual void windowResized(Ogre::RenderWindow* rw);
   virtual void windowClosed(Ogre::RenderWindow* rw);
   virtual bool frameRenderingQueued(const Ogre::FrameEvent& evt);
 private:
   void createScene();
   Ogre::Root *mRoot;
   Ogre::RenderWindow *mWindow;
   Ogre::SceneManager *mSceneMgr;
   Ogre::Camera *mCamera;
   Ogre::String mPluginsCfg;
   Ogre::String mResourcesCfg;

   OIS::InputManager *mInputMgr;
   OIS::Mouse *mMouse;
   OIS::Keyboard *mKeyboard;

};

Был создан такой файл интерфейса для Swig:
%module ogre
 %{
 #include "OgreApplication.h"
 %}
 %include "OgreApplication.h"

 class OgreApplication{
 public:
 OgreApplication();
 ~OgreApplication();
 void go();
 };


Компиляция:
swig -lua -c++ ogre.i
gcc -fPIC -I/usr/include/lua OgreApplication.h ogre_wrap.cxx \
    -I/usr/local/include/OGRE -I/usr/include/OIS
gcc -shared -L/usr/lib/lua -llua OgreApplication.o ogre_wrap.o \
    -o ogre.so


При попытке загрузить модуль в Lua - ошибка "undefined symbol"
Вывод ldd -d ogre.so
linux-vdso.so.1 =>  (0x00007fff527ba000)
liblua-5.2.so => /lib64/liblua-5.2.so (0x00007ff247736000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007ff24751f000)
libc.so.6 => /lib64/libc.so.6 (0x00007ff247161000)
libm.so.6 => /lib64/libm.so.6 (0x00007ff246e59000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007ff246c55000)
/lib64/ld-linux-x86-64.so.2 (0x00007ff247ba1000)
 undefined symbol: _ZTVN10__cxxabiv121__vmi_class_type_infoE    (./ogre.so)
 undefined symbol: _ZTVN10__cxxabiv117__class_type_infoE    (./ogre.so)
 undefined symbol:   _ZN4Ogre20ResourceGroupManager30AUTODETECT_RESOURCE_GROUP_NAMEE      (./ogre.so)
undefined symbol: _ZNSt8ios_base4InitD1Ev   (./ogre.so)
undefined symbol: _ZN4Ogre10StringUtil5BLANKE   (./ogre.so)
undefined symbol: _ZN4Ogre7Vector34ZEROE    (./ogre.so)
undefined symbol: _ZN4Ogre10Quaternion8IDENTITYE    (./ogre.so)
undefined symbol: __gxx_personality_v0  (./ogre.so)

Собственно, буду рад рабочему примеру или объяснению, как все-таки заставить Swig работать.
  • Вопрос задан
  • 2315 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы