VS2012中使用CEGUI项目发布到XP平台的问题(核心方法就一句话。“你项目使用的所有外部依赖库都用/MT编译。”)

Posted 朝闻道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VS2012中使用CEGUI项目发布到XP平台的问题(核心方法就一句话。“你项目使用的所有外部依赖库都用/MT编译。”)相关的知识,希望对你有一定的参考价值。

接着上一篇文章,详细说说如何把一个带CEGUI的项目发布到XP平台。

这个问题纠缠了我好几天。这里把详细解决思路记下来。有同样问题的朋友可以少走很多弯路。

核心方法就一句话。“你项目使用的所有外部依赖库都用/MT编译。”

1.准备。

首先你要具备如下工具:CEGUI源码;FreeType源码;Pcre源码;CMake工具。我会在下文说明原因。

各个开源库的版本号,请参考你的CEGUI引用的各自的头文件分别下载。

FreeType开源库主页:http://sourceforge.net/projects/freetype/?source=dlp

Pcre开源库主页:http://sourceforge.net/projects/pcre/?source=dlp

Pcre源码编译指南:http://tunps.com/cmake-pcrecpp

CMake工具主页:http://cmake.org/cmake/resources/software.html

 

2.编译CEGUI

请参考我的上一篇博客:http://blog.csdn.net/lsldd/article/details/8821063,编译CEGUI。注意,每个子项目都要配置好。

编译完成后,你会发现一大堆Link冲突错误和警告,大概如下:

1>freetype.lib(ftbase.obj) : warning LNK4217: locally defined symbol _strrchr imported in function _raccess_make_file_name
1>pcre.lib(pcre_exec.obj) : warning LNK4049: locally defined symbol _memmove imported

1>freetype.lib(smooth.obj) : error LNK2001: unresolved external symbol __imp__longjmp

仔细观察错误,主要是FreeType导致的。原因是CEGUIBase这个工程中引入了如下几个库:

Winmm.lib,freetype.lib,pcre.lib,zlib.lib

因此我们猜想,这里的freetype是用/MD编译的!这就是罪魁祸首!必须自己用/MT编译源码!

Pcre导致很多警告,我这里以防万一也自己编译了;

ZLib也有1,2个警告,但是替换它就坑爹了,因为CEGUI把ZLib拷贝了部分源码(unZip部分)到自己工程,又修改了部分源代码(主要是吧C风格改成C++),因此我没有替换ZLib,结果表明不影响。

 

3.编译依赖库

同样参考发布到XP的标准步骤,分别编译FreeType源码;Pcre源码。然后把lib放入CEGUI的dependencies\lib目录下。

注意。lib目录下还有2个目录,由于我们把CEGUI编译为DLL,所以,请放在dependencies\lib\dynamic目录下。

然后编译CEGUI。这里由于CEGUI已经在上一步编译过,这一步只是LinK,所以重新Link的时间很短。

Link后仍然会出现一堆库冲突错误。典型的如下:

1>MSVCRT.lib(MSVCR110.dll) : error LNK2005: _malloc already defined in LIBCMT.lib(malloc.obj)
1>MSVCRT.lib(MSVCR110.dll) : error LNK2005: _free already defined in LIBCMT.lib(free.obj)

这就是因为工程中同时存在/MT与/MD的依赖,必须砍掉一个。由于我们要发布到XP必须使用/MT,因此,请忽略掉MSVCRT.lib,方法是:

【工程属性】-【链接】-【输入】-【忽略指定依赖项】,输入MSVCRT.lib

这样支持发布到XP的CEGUI就准备好了。

 

4.配好你的项目

对一个简单的CEGUI程序而言,需要用到如下DLL:

CEGUIBase.dll,CEGUIOpenGLRenderer.dll, CEGUIExpatParser.dll, CEGUISILLYImageCodec.dll, CEGUIFalagardWRBase.dll ,SILLY.dll

可能还需要部分C运行时库,比如msvcp100.dll之类。请自行准备,没有可以去别的系统上COPY或者下载。

随时注意看CEGUI.Log文件,看哪个DLL加载失败。要么是找不到,要么是没有使用/MT编译。

把CEGUI编译的相应的Lib链接如你的工程项目。

同时,把【工程属性】-【链接】-【优化】里的第一项和第二项优化开关都打开

同样用发布到XP的标准步骤,编译好你的工程。

现在应该没有问题了。

 

 

http://blog.csdn.net/lsldd/article/details/8927698

以上是关于VS2012中使用CEGUI项目发布到XP平台的问题(核心方法就一句话。“你项目使用的所有外部依赖库都用/MT编译。”)的主要内容,如果未能解决你的问题,请参考以下文章

让用VS2012/VS2013编写的程序在XP中顺利执行

VS2012编译的MFC程序XP运行出错R6010

Visual Studio让用VS2012/VS2013编写的程序在XP中顺利运行(转)

CEGUI Log系统

VS2013 "v120_xp" 默认作为平台工具集

visual studio 2012 编写的程序xp能 运行吗?