您的位置:首页 > 移动开发

用VC8.0编译Ogre工程常见问题

2011-11-02 11:26 531 查看
楼主下载了source文件夹而又CMake错误,对CMakeLists.txt不太了解,学习如何利用源码构建pagedGeometry的工程,得此文。用VC2005构建OGRE项目的时候,遇到的相关类似问题解决方法也大同小异。权且当做对刚入门的编程爱好者抛砖引玉。

环境: Win 7, VS2005(vc 8.0), Ogre1.6.5,(PagedGeometry_v1.05_VC80插件,因为楼主在调这个插件所以用到)

1.新建工程

打开vc 8 2005,文件 → 新建 → 项目Visual C++→win32选择win32项目(不是win32控制台应用程序)

输入工程名(假设为tree)(假如后面编译出现错误:无法识别的外部符号 _main ,就是这里设置错误了)


     下一步 →弹出的win32应用程序向导窗口 → 下一步 →应用程序设置 → 应用程序类型:默认是windows应用程序(W),附加选项:选空项目(E)

点击完成。现在我们的项目文件夹地址为:D:\VC2005-projiect\tree。点击完成后,VS2005 现在会切到tree项目的解决方案界面,也就可以开始进行编写了。

2.添加文件

1.头文件一项:右键点击“头文件”→添加--新建项

弹出的添加新建项窗口中。选择“头文件(.h)”,命名“HeightFunction”,保存位置:默认的是d:\VC2005-projiect\tree\tree,但是我们要改动一下,把头文件放在include文件夹方便管理的查看。点击浏览,在tree(项目根文件夹,即第一个tree)文件加下新建一个include文件夹,这样我们保存位置就变成了D:\VC2005-projiect\tree\include,直接保存。
      2.源文件一项:类似头文件,右键点击“源文件”→添加--新建项,弹出的添加新建项窗口中。选择“c++文件(.cpp)”,命名“Example1”,保存位置:把源文件放在src文件夹方便管理的查看,在tree文件加下新建一个src文件夹,保存位置就变成D:\VC2005-projiect\tree\src,直接保存。
 
为了调试环境,我们先把把实例中的HeightFunction.h和Example1.cpp 代码Copy进来,对应的粘贴到刚才建立的2个文件中

3.编译问题

问题1:无法打开包括文件:“HeightFunction.h”: No such file or directory”
打开项目--属性--配置属性--C/C++--常规--右边的配置框中:附加包含目录 写入:..\inluce表示包含当前文件夹目录下,tree文件夹中的include文件夹(最好使用..\
这种形式相对路径的模式,也也可以指定目录为D:\VC2005-projiect\tree\include的,这样的绝对路径也行得通,但是工程文件夹一旦移动或者把工程Copy到别个电脑上运行就会报错了),点击应用或者确定来保存配置(这个一定要记得,否则改半天,没保存出来编译,错误还是存在,不要学楼主犯2~),再编译,这时候HeightFunction.h就包含进来了



include问题解决了,但是又出现新的问题点了

问题2:error C2664: “SetCurrentDirectoryW”: 不能将参数 1 从“const char [13]”转换为“LPCWSTR”
打开项目--属性--配置属性--常规:右边的配置框中,“项目默认值”一栏的“字符集“由原来的”使用 Unicode 字符集“,改成“未设置”保存设置,再编译。



嗯,第二个问题解决了,继续编译。
多了好多错误啊!

问题3:
1>Example1.obj : error LNK2001: 无法解析的外部符号 "……
      1>Example1.obj : error LNK2001: 无法解析的外部符号 "……
      1>Example1.obj : error LNK2001: 无法解析的外部符号 "……
      ……
     这是因为我们没有添加库文件的原因。

     在我的电脑中,直接进入刚才的工程文件夹:“D:\VC2005-projiect\tree”中,在该文件夹下新建一个lib文件夹用来保存库文件。目录为D:\VC2005-projiect\tree\lib,将我们要用到的库文件COPY进来。

要copy的lib清单:
   PagedGeometry.lib

    PagedGeometry_d.lib

    OgreSDK的lib文件夹的所有.lib文件(这个也可以不拷贝,但是一会要包含它的库文件夹,但是我比较偷懒,一股脑全搬过来了,省的以后编译别的功能又报错然后让我去添加)。

copy完了之后,打开项目--属性--配置属性--连接器--常规,右边的框中,附加库目录:
如是刚才我们把Ogre的库文件copy进来lib文件夹里的话的话,这一栏只需写:

附加库目录: ..\lib 这个就是我们刚才建立的lib文件夹,表示包含当前目录下tree文件夹中的lib文件夹
如果刚才没有包含进来的话,我们还需要多加一行:

附加库目录: ..\lib;"$(OGRE_HOME)\lib" 后面的"$(OGRE_HOME)\lib" 表示Ogre SDK的lib文件夹位置,那个$(OGRE_HOME)是我安装Ogre时设置的变量,也就是指定Ogre的安装位置,要是没设定环境变量的话的话,后面那句直接写成E:\OgreSDK\lib也行(E:\OgreSDK就是的OGRE安装目录了,E:\OgreSDK==OGRE_HOME变量)




PS:打开项目--属性--配置属性--常规输出目录改为:..\bin\Release,中间目录改为:..\obj (如果输Debug模式,则改为输出目录改为..\bin\Debug,中间目录改为:
..\obj )这样就把那些“乱七八糟”的中间文件和生成的.exe分离开来了。(假如后面出现即使添加了media文件夹,但是仍然报错Runtime Error!就是这里的输出目录有问题啦,参考最后生成的目录结构)
包含了库文件的文件夹之后,我们还要指定程序来使用其中的库文件,打开项目--属性--配置属性--连接器--输入这一栏中,右边的附加依赖项:写入OgreMain.lib OIS.lib PagedGeometry.lib(这是Release模式,如果是Debug模式,写入 OgreMain_d.lib
OIS_d.lib PagedGeometry_d.lib),三个库文件用空格隔开(有些编译器是用 ”;“ 隔开),或者直接点输入栏那边那个 ... 的小框,输入的时候按回车来隔开3个库文件,这样就不用纠结是用空格还是“;”来隔开了。点击应用或者确定来保存配置,




问题4:无法识别的外部符号 _main
这个是一个补充,就是预防万一建工程的时候弄错了,补救办法是:项目--属性--配置属性--链接器--系统,右边的子系统,改为Windows (/SUBSYSTEM:WINDOWS)



    
再编译,这时候应该能通过编译了。

4.运行.exe的问题
这时候可能会迫不及待的想运行程序看看效果了,但是又提示出错了!

问题1:缺少OgreMain.dll
这个简单,去Ogre SDK的bin文件夹下的Release或者Debug拷些回来玩玩,我们默认把带.dll结尾全拷呗了,以便以后使用到,放在生成Example1.exe的文件夹中(Release模式下是放在D:\VC2005-projiect\tree\release文件夹中,Debug当然放在D:\VC2005-projiect\tree\debug中),再运行的话,显示了Ogre的配置界面,但是运行还是会出错

      问题2:
Runtime Error!

      This application has requested the Runtime to it in anunusual way

      Please contect the application's support team for more information.
     因为我们没有吧media放进来哈哈哈。把media文件夹添加进来,放到tree文件夹(D:\VC2005-projiect\tree)里就OK了。要是即使添加了media文件夹,仍然报错,那么就参考下面的文件夹相对路径,相对路径错误的话运行也是正确的哦。
出现下面的错误提示:





检查插件:

      Plugin=Plugin_CgProgramManager
      Plugin=Plugin_PCZSceneManager

Plugin=Plugin_OctreeSceneManager
及相应的DLL是否添加
到这里,我们的程序已经可以运行了,文件夹结构为

tree
|____bin
|   |____Release
|   |____Debug
|____include
|____lib
|____media
|_____src
|____tree
  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息