OGRE 1.7.3 与 VS2010 环境配置:从 SDK 编译到链接排错

发布时间:2026/11/3 14:34:35
OGRE 1.7.3 与 VS2010 环境配置:从 SDK 编译到链接排错

简介:面向初学3D图形渲染与游戏开发的Ogre引擎使用者,这份docx文档围绕在Visual Studio 2010下完成Ogre SDK安装、环境变量与Boost库配置、示例程序编译验证,以及新建项目后的属性页设置展开,适合需要从零搭建Ogre开发环境、理清编译链接与调试配置关系的学习者。压缩包仅含1个docx文件,约67KB,篇幅集中、便于随查随用。已有141人学习,说明其配置路径对入门者具有一定参考价值。文档把准备工作、SDK生成、依赖库区分Debug与Release、附加包含目录与库目录、后期生成事件等关键环节串成完整流程,并保留了运行示例浏览器验证与选择Direct3D9渲染子系统的判断依据,可帮助读者减少环境搭建中的反复试错,也便于按项目需求调整配置、补充库文件或排查链接错误。

1. 环境没对齐:OGRE 1.7.3 只认 VS2010 的 v100 工具集

配置 Ogre 引擎最容易踩的坑不在引擎本身,而在版本链条:OGRE 1.7.3 的 SDK 包名叫OgreSDK_vc10_v1-7-3.exe,vc10就是 Visual Studio 2010 的编译器代号,配套的平台工具集是 v100。拿 VS2015 以上的 IDE 打开Ogre.sln,第一步弹「平台工具集 v100 未安装」;硬着头皮往里走,TutorialFramework 里那套字符串转换又跟着报一串错。我见过的现场里,SamplesBrowser.exe双击能开、样例场景也转得动,可自己新建的工程一编译十几条 LNK2019——这并不矛盾,SDK 装好了是一件事,工程配好了是另一件事。这套组合在课程设计、老教材配套工程和一些维护中的老项目里依然常见,装不好不是引擎难用,是 DirectX 9 运行时、OGRE_HOME的值、boost_1_44 的位置、属性页里那几个路径,任何一环错位都会在链接阶段翻车。下面按能真正跑通的顺序走一遍,从三个安装包落地开始。

2. 准备工作:SDK 解压、DirectX 9 与 VS2010 三件套落地

先把东西备齐再动手。这一章里的三个包缺一个,后面都会以「报错」的形式提醒你,区别只是错在链接期还是运行期。

2.1 把 OgreSDK_vc10_v1-7-3.exe 解到 D:\Ogre

这个 exe 不是常规安装程序,是自解压包,双击后它只问一句解压到哪个目录。填D:\Ogre,等进度条走完。目录里会多出一层OgreSDK_vc10_v1-7-3,真正的 SDK 根目录是D:\Ogre\OgreSDK_vc10_v1-7-3,后面环境变量、附加包含目录、附加库目录全部以它为基准,多一层少一层都对不上。

D: cd \Ogre dir

第一行切到 D 盘,第二行进入 Ogre 目录,第三行列目录。输出里应该能看到OgreSDK_vc10_v1-7-3这个文件夹,进去之后是下面这些内容:

目录/文件里面是什么后面用在哪
Bin编好的可执行文件与 dll调试命令、后期生成事件的落点
includeOgre、OIS 的头文件C/C++ 附加包含目录
libDebug/Release 两套静态库链接器附加库目录
Samples样例工程与 TutorialFramework建立模板工程时取文件
boost_1_44boost 1.44 的头文件与库附加包含目录最后一项
Ogre.sln整个 SDK 的解决方案接下来要生成的那一个

路径选择上有两条硬规矩。第一,别解到C:\Program Files下面,带空格的路径会在属性页和后期生成事件里反复加引号,稍不留神就是「命令退出代码 1」。第二,别用中文目录,OGRE 1.7.3 这代工具链对非 ASCII 路径的处理谈不上稳,编译到一半报个莫名的编码错误,查起来全是玄学。

提示:解压完先别改OgreSDK_vc10_v1-7-3这个名字,环境变量里写的值要和它一字不差,改一次名后面要跟着改一串地方。

2.2 DirectX 9 与 D3DX9_43.dll 的两个落点

把d3dx9_43 (1).rar解压出来,先跑里面的 DirectX 9 安装程序(DirectX End-User Runtime,2010 年 6 月那一版),走完默认流程。装完再把D3DX9_43.dll拷进系统目录。

copy "D:\dx9\d3dx9_43.dll" "%SystemRoot%\System32\" copy "D:\dx9\d3dx9_43.dll" "%SystemRoot%\SysWOW64\"

第一条给 32 位系统用,也是原文档里写的那一步。第二条是给 64 位系统上的 32 位进程用的:64 位 Windows 有个文件系统重定向,32 位程序去访问System32时实际被转到SysWOW64,只往System32里丢一份,结果是 32 位程序照样报「找不到 d3dx9_43.dll」。VS2010 本身和 OGRE 1.7.3 的样例都是 32 位进程,所以两个目录都得有。%SystemRoot%一般就是C:\Windows,写成变量比写死路径省事。

为什么非要装 DirectX 9,而不是系统里已经有 DirectX 11 就够了:OGRE 1.7.3 的 Direct3D9 渲染插件依赖d3dx9_43.dll这个辅助库,它只随 DirectX 9 的运行时一起分发,新的 DirectX 运行库不包含它。这一步跳过,SamplesBrowser.exe双击就是一闪而过或者弹个缺 dll 的框。

注意:往System32和SysWOW64里写文件要管理员权限,用管理员身份开命令行窗口,别在普通 cmd 里硬拷。

2.3 VS2010 能不能干活,先花两分钟自检

打开 VS2010,帮助 → 关于,确认版本号是 10.0。有没有 SP1 不影响这套流程,但 C++ 组件必须是装上的——VS2010 安装时可以不勾 Visual C++,那种情况下连 v100 工具集都没有,后面打开Ogre.sln会直接告诉你项目类型不受支持。

然后新建一个 Win32 控制台空项目,随便写个int main(){return 0;},编译运行一次。这一步看着多余,实际是省时间:生成整个Ogre.sln要等很久,如果 VS 本身有问题,等于白等一轮。项目属性里顺手看一眼「配置属性 → 常规 → 平台工具集」,应该是v100;如果这里是灰的或者显示v90、v110,说明装的不是 2010 版的编译器。

还有一个顺序问题容易被忽略:VS2010 是在进程启动时读取环境变量的。如果你先开着 VS,再去加OGRE_HOME,那个 IDE 里所有$(OGRE_HOME)都会展开成空字符串,路径变成\include,报错信息看着像路径写错,其实只是没重启。稳妥做法是环境变量设完再开 VS,中途改过变量就关掉重开。

3. 环境变量与 SDK 编译:OGRE_HOME、boost_1_44 和那一次长编译

这一章是整个安装里最耗时间的一段,Ogre.sln生成一次十几分钟很正常,所以每个前置条件都要在点「生成」之前确认掉。

3.1 OGRE_HOME 的值要指到 SDK 根目录

图形界面路径是:右击「计算机」→ 属性 → 高级系统设置 → 环境变量 → 用户变量里新建。变量名OGRE_HOME,变量值D:\Ogre\OgreSDK_vc10_v1-7-3。习惯用命令行的可以这样:

setx OGRE_HOME "D:\Ogre\OgreSDK_vc10_v1-7-3"

setx写的是用户变量,写入注册表,只对之后新开的进程生效,当前这个 cmd 窗口读不到,已经在跑的 VS2010 更读不到。所以执行完关掉所有 IDE 和命令行,重新开一个窗口验证:

echo %OGRE_HOME% dir "%OGRE_HOME%\include\Ogre.h"

第一条回显变量值,第二条去头文件目录里找Ogre.h。两条都正常,说明变量指对了;如果第二条提示找不到文件,八成是值里少了OgreSDK_vc10_v1-7-3这一层,指到了D:\Ogre。

值末尾不要加反斜杠。虽然 Windows 大多时候能容忍\\,但拼出来的$(OGRE_HOME)\include在属性页里显示成双斜杠,排查时容易让人怀疑人生。用用户变量还是系统变量都行,用户变量作用范围小一点,出问题也好删。

提示:改完变量用echo验证这一步别省。后面所有路径都靠这个变量展开,它错了,属性页里看着完全正确的配置也会全线失效。

3.2 boost_1_44 的两处落点

原文档要求在C:\Program下建一个 boost 文件夹,把 SDK 里的boost1_44拷过去。这一步看着多余——SDK 目录里本来就躺着一份——但Ogre.sln里有工程的附加包含目录是写死的绝对路径,指向C:\Program Files\boost\boost_1_44,少了这份拷贝,生成到那几个工程时就会报找不到 boost 头文件。

mkdir "C:\Program Files\boost" xcopy /E /I "D:\Ogre\OgreSDK_vc10_v1-7-3\boost_1_44" "D:\Ogre\OgreSDK_vc10_v1-7-3\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\.." "C:\Program Files\boost\boost_1_44"

上面这条命令写坏了,正确写法只看下面这一条,别抄错行:

mkdir "C:\Program Files\boost" xcopy /E /I "D:\Ogre\OgreSDK_vc10_v1-7-3\boost_1_44" "C:\Program Files\boost\boost_1_44"

/E连空子目录一起复制,/I让 xcopy 把目标当成目录处理,目标不存在时直接建。整条命令里路径带空格,引号一个都不能少,少一个就变成复制到C:\Program。

目录名保持boost_1_44不要改成boost1_44。Ogre.sln里那些写死的附加包含目录就是按boost_1_44这个名字拼的,改了名,编译期会报找不到boost/...开头的头文件。SDK 自带的那一份不用删,自己建模板工程时附加包含目录写$(OGRE_HOME)\boost_1_44也照样能用。两份并存不是问题,但版本必须都是 1.44,混版本最容易出的是链接期符号冲突,报错信息完全看不出跟 boost 有关。

3.3 生成解决方案:Ogre.sln 打开后先看配置管理器

双击D:\Ogre\OgreSDK_vc10_v1-7-3\Ogre.sln。如果 VS2010 弹转换向导,说明打开它的 IDE 版本不对,先回去确认 2.3 那一步。

生成之前先看「生成 → 配置管理器」:活动解决方案配置是Debug,活动解决方案平台是Win32,不是x64。OGRE 1.7.3 的 SDK 只带 32 位库,平台选错,链接器会在lib\x64这种根本不存在的目录里找库,报错看起来像库没编译。

确认完,右键解决方案 → 生成解决方案,然后去干别的。这一步慢是正常的,别因为进度条不动就点取消,取消之后残留的中间文件还得清一遍重来。编译结束看输出窗口最后一行:0 个错误。如果有一堆错误,只处理排在最前面的那一条,后面的多半是它引起的连带错误,从下往上改是纯浪费。

3.4 cthugha\Debug 产物归位与 SamplesBrowser 冒烟

生成完成后去 D 盘根目录看一眼,会多出一个cthugha文件夹。这是 SDK 里部分渲染插件工程的输出目录被设在了D:\cthugha,Debug 配置的产物落在D:\cthugha\Debug。这些 dll 得放到 SDK 的bin\debug下,样例浏览器才认。

dir D:\cthugha\Debug xcopy /E /Y "D:\cthugha\Debug\*" "D:\Ogre\OgreSDK_vc10_v1-7-3\bin\debug\"

第一条先确认目录里有东西,第二条整体拷过去,/Y表示同名文件直接覆盖不再问。覆盖是必须的,bin\debug里原本就有同名文件,不覆盖等于没拷。

然后双击bin\debug\SamplesBrowser.exe。能进样例浏览界面,说明 SDK 这一层通了。随便点开一个样例,会弹 Ogre 的配置对话框,渲染子系统下拉里选Direct3D9 Rendering SubSystem,点 OK,能进到场景里动起来,SDK 就是装好了。

如果对话框没弹出来、直接闪退或者黑屏,先删掉bin\debug\ogre.cfg再启动一次——这个文件缓存了上次的渲染配置,显卡环境变了之后它会让程序在错误的子系统上初始化。还

本文还有配套的精品资源,点击获取