编译包含Ogre3D的DLL在使用时会出现断言错误

时间:2010-06-15 23:10:37

标签: c++ ogre3d

我正在构建一个框架,并且正在编译成一个静态库供其他项目使用。图书馆完美无缺。问题是使用库的项目的链接时间很长,所以我想我会创建一个相同框架的DLL项目。我从婴儿步骤开始,通过visual studio创建了一个MFC DLL项目。该项目有以下标题:

 /// --------------------------------------------

#ifndef OGRECORE_H
#define OGRECORE_H

#ifdef OGREFW_EXPORT
#define OGREFW_DLL __declspec(dllexport)
#else
#define OGREFW_DLL __declspec(dllimport)
#endif

class OgreRoot;

namespace OgreFW
{
 class OGREFW_DLL OgreCore// : public OIS::KeyListener, public OIS::MouseListener
 {
 public:

  OgreCore();
  ~OgreCore();

 };
};

#endif // OGRECORE_H

这是源

#include "stdafx.h"

#include "OgreCore.h"
//#include "Ogre.h"
//#include "OgreRoot.h"
//#include "OgreRenderWindow.h"
//#include "OgreLog.h"
//#include "OgreLogManager.h"
//#include "OgreOverlay.h"
//#include "OgreViewport.h"
//#include "OgreRenderWindow.h"
//#include "OgreFrameListener.h"
//#include "OgreWindowEventUtilities.h"
//#include "OgreSceneNode.h"
//#include "OgreEntity.h"
//#include "OgreManualObject.h"
//#include "OgreMeshManager.h"
//#include "OgreConfigFile.h"
//#include "OgreOverlayContainer.h"
//#include "OgreOverlayManager.h"

namespace OgreFW
{

 OGREFW_DLL
 OgreCore::OgreCore()
 {


 }

 // ------------------------

 OGREFW_DLL
 OgreCore::~OgreCore()
 {

 }
}

正如你所看到的,我已经注释了Ogre包含的内容。当一个项目使用编译的DLL并构造这个(OgreCore)类时,它工作得很好。只要取消注释其中一个Ogre包含并再次编译DLL,使用DLL的项目现在会产生断言错误。完整的详细信息可以在Ogre论坛帖子中找到。我首先在那里发布了这个问题,但由于它不是真正的Ogre特定问题,我想我也会在这里尝试。 Ogre帖子的链接是:

http://www.ogre3d.org/forums/viewtopic.php?f=2&t=58403

提前谢谢

1 个答案:

答案 0 :(得分:1)

最后找到了解决方案HERE

简短的解释是我创建的DLL应该是没有DLL主的非MFC DLL,但Visual Studio给了我一个MFC DLL模板。