У меня есть следующий класс:
#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 работать.