2

Ogre3D を使用してゲームを書いていますが、問題があります。

プログラムを起動すると、segfault エラーが表示されます。

*-*-* OGRE Initialising                                                                                                                                                                                                                                                        
*-*-* Version 1.7.2 (Cthugha)                                                                                                                                                                                                                                                  
Creating resource group Essential                                                                                                                                                                                                                                              
Added resource location '../media/packs/SdkTrays.zip' of type 'Zip' to resource group 'Essential'
Added resource location '../media' of type 'FileSystem' to resource group 'General'
Added resource location '../media/materials/scripts' of type 'FileSystem' to resource group 'General'
Added resource location '../media/materials/textures' of type 'FileSystem' to resource group 'General'
Added resource location '../media/models' of type 'FileSystem' to resource group 'General'
Naruszenie ochrony pamięci [This means segfault]

そして、私は知りません、なぜ...

コード:

#define OGRE_CHANGE1 ((1 << 16) | (1 << 8))

#include "Ogre.h"
#include "ExampleApplication.h"

#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
#define WIN32_LEAN_AND_MEAN
#include "windows.h"
#else
#include <iostream>
#endif

class MyApp : public ExampleApplication
{
  protected:
  public:
    MyApp()
    {
    }

    ~MyApp()
    {
    }
  protected:
    void createScene(void)
    {
    }
};

#ifdef __cplusplus
extern "C" {
#endif

#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT )
#else
int main(int argc, char **argv)
#endif
{
  MyApp App;
   try
   {
     App.go();
     return 0;
   }
   catch (Ogre::Exception& e)
   {
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
     MessageBox( NULL, e.getFullDescription().c_str(), "Exception!",
           MB_OK | MB_ICONERROR | MB_TASKMODAL);
#else
     std::cerr <<"Exception:\n";
     std::cerr <<e.getFullDescription().c_str() <<"\n";
#endif
     return 1;
   }
}

#ifdef __cplusplus
}
#endif

(Ogre Wiki のコードの一部)

resources.cfg:

# Resources required by the sample browser and most samples.
[Essential]
Zip=../media/packs/SdkTrays.zip

# Resource locations to be added to the default path
[General]
FileSystem=../media
FileSystem=../media/materials/scripts
FileSystem=../media/materials/textures
FileSystem=../media/models

plugins.cfg:

# Defines plugins to load

# Define plugin folder
PluginFolder=/usr/lib/OGRE

# Define plugins
# Plugin=RenderSystem_Direct3D9
# Plugin=RenderSystem_Direct3D10
# Plugin=RenderSystem_Direct3D11
 Plugin=RenderSystem_GL
# Plugin=RenderSystem_GLES
 Plugin=Plugin_ParticleFX
 Plugin=Plugin_BSPSceneManager
 Plugin=Plugin_CgProgramManager
 Plugin=Plugin_PCZSceneManager
 Plugin=Plugin_OctreeZone
 Plugin=Plugin_OctreeSceneManager

そして - コメントPlugin=Plugin_CgProgramManagerするとplugins.cfg... プログラムは動作しますが、このプラグインが必要です。:)

助けてください。
前もって感謝します。

4

1 に答える 1

2
  1. デバッグ情報を含めてプログラムをコンパイルします(GCCを使用すると、これは-gオプションがコンパイラーに渡されることを意味します)。
  2. デバッガーで実行します。
  3. クラッシュすると、スタックトレースが取得されます。
  4. 実行したこと(または初期化の欠落など、実行しなかったこと)に依存しているように見えるかどうか、またはOgre3Dの適切なクラッシュのように見えるかどうかを調べます。
    1. 前者の場合は修正してください。
    2. 後者の場合は、報告してください。
于 2011-02-01T09:11:53.003 に答える