配置irrlicht的源码编译

来源:互联网 发布:mac下载的文件在哪里 编辑:程序博客网 时间:2024/06/05 23:59

 

公司要用irrlicht的引擎,学了一些时间,基本上会用其添加游戏场景了,但是由于采用的是irrlicht.lib库编译方式,运行时需要irrlicht.dll支持,而且重要的是看不到引擎的实现,为应用程序的编写和调式带来诸多不便,于是花了几个小时配置下源码irrlicht的编译方式。下面是一个大致的过程。

 

1,拷贝%/irrlicht_1.5/source到当前工作目录%/work。可以看到source下有个source.txt说明irrlicht enqine配置以及其在linux下编译方法,和一个irrlicht的文件夹,其中保存着所有irrlicht引擎的实现源码。

 

2,在%/irrlicht目录下创建一个空的console工程

 

3,然后在工程中建一个filer叫做irr,并irrlicht下的所有.cxx.hxx导入到该filer下面。然后编译,发现有n.h文件都无法找到,这些文件大都是I开头的表示Irrlicht中的interface。他们都在%/irrlicht_1.5/include下面,也就是采用dll库的时候需要在工程配置中引入的那部分include文件。

 

4,现在把%/irrlicht_1.5/include下面的.hxx文件统统拷贝到irrlicht下,然后在工程中建一个叫做inculdefiler,并将刚刚拷贝过来的所有文件导入到filer下。然后编译。

 

5,此时仍然编译不通过,原因是找不到DirectX相关的头文件。将DirectX配置好,然后编译。

 

6,仍然不通过,提示zlib.h文件找不到,但是在irrlicht目录下发现有zlib的文件夹,于是建其中所有.cxx.hxx导入到一个新建的zlibfiler下面,并且修改include设置,将../zlib的配置填入,再次编译。

 

7,发现有这样的错误error C2491: 'irr::createDeviceEx' : definition of dllimport function not allowed。找到 createDeviceEx的定义,研究了半天,发现该函数是为了导出dll而设计的,那么只需要将其定义前面的宏IRRLICHT_API改为空定义,编译。

 

8ok,编译基本上通过了,但是连接的问题又来了,出了一大堆符号找不到,观察都是png开头和jpeg开头的一些符号。发现irrlicht目录下还有两个文件夹:libpngjpeglib,他们应该就是定义这些找不到的符号的。于是将这两个目录下的所有.cxx.hxx分别导入到pngjpeg的两个filer下,编译。

 

9,然后又来了一堆语法错误,来自jemedos.cjmemmc.c,他们应该是跟平台相关的文件,没什么用,直接从工程剔除,编译。

 

10ok,已经只剩很少的连接错误了,34个,轻松多了:)。这些链接错误都是因为重复定义,其实ligpngjpeglib下的许多文件都是为了代码测试用的,有很多的main函数,把这些文件统统从工程剔除,再次编译。

 

11,终于剩三个连接错误:joyGetDevCapsAjoyGetPosExjoyGetNumDevs。网上搜一把,这些都是关于游戏手柄的,在winmm.lib实现。

 

12,现在,剩下的就只差一个main函数了。那么把irrlichtexample01main.cpp拷过来,

去掉irrlicht.lib导入的语句,编译,运行。

 

13,好了,采用全部源码的irrlicht就跑起来了。然后就可以轻松地研究irrlicht的结构和设计思路了。

 

Note

1,如果出现d3d8.h找不到的问题,要在complierconfig.h中去掉宏开关_IRR_COMPILE_WITH_DIRECT3D_8_,以确保仅仅使用DirectX9

 

2,如果出现IParticleAffector.hirrTypes.h文件找不到的问题,请将这两个文件的include语句中的<>改为“”。

 

3,如果出现LoadLibarary()函数不认识Unicode的问题,请将_UNICODEUNICODE编译开关去掉。