接着上一篇文章,详细说说如何把一个带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编译。”)的更多相关文章

  1. VS2012发布到XP平台

    默认情况下,你的VS2012工程发布后,在XP下运行会出现提示“not a valid win32 application”. 微软推出了Visual Studio 2012 update 1可以支持 ...

  2. Android Library项目发布到JCenter最简单的配置方法

    前沿 网上的步骤看起来实在太麻烦,gituhb上偶然间看到的一个项目,经过实际验证确实可行.github连接:https://github.com/xiaopansky/android-library ...

  3. 循序渐进学.Net Core Web Api开发系列【7】:项目发布到CentOS7

    系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 本篇讨论如 ...

  4. vs 外部依赖项、附加依赖项以及如何添加依赖项目

    我们在 VS 中创建 Win32 控制台应用程序,vs 会为解决方案创建默认地创建 4 个 filters(资源管理器中没有对应的目录和文件夹): 头文件:一般为 .h 文件 外部依赖项 源文件:一般 ...

  5. http://182.92.241.20/mypro/login 偶的点金项目细化分包管理平台即将上线!!

    http://182.92.241.20/mypro/login            偶的点金项目细化分包管理平台即将上线!! 敬请期待! 项目外包利器 项目管理利器

  6. MVC4.0中项目发布遇到IE11时session存入URL中,导致记不住密码的问题

    ///MVC4.0中项目发布遇到IE11时session存入URL中,导致记不住密码的问题,在webconfig中配置<system.web><authentication mode ...

  7. 如何:使用 Visual Studio 中的一键式发布来部署 Web 应用程序项目

    原文: 如何:使用 Visual Studio 中的一键式发布来部署 Web 应用程序项目 本主题介绍如何在以下产品中使用 一键式发布 发布(部署)Web 应用程序项目: Visual Studio ...

  8. 在Intellij上开发项目发布到tomcat时,同一个局域网内的其他机子访问不到自己电脑上tomcat中的项目,只能本机访问

    在Intellij上开发项目发布到tomcat时,同一个局域网内的其他机子访问不到自己电脑上tomcat中的项目,只能本机访问 问题描述:在Intellij上开发项目发布到tomcat时,同一个局域网 ...

  9. 把自己的项目发布到maven仓库并在maven和gradle中开始使用

    把自己的项目发布到maven仓库并在maven和gradle中开始使用 上一条博客中提到的日志打印项目总算是维护的差不多了, 不过现在使用它还是打成jar包放到其他项目内, 所以决定把项目传到mave ...

随机推荐

  1. PatentTips - 在物联网中进行数据过滤的方法和装置

    背景技术 [0001] 本发明涉及物联网,特别涉及在物联网进行数据过滤的方法和装置. [0002] 物联网是新一代信息技术的重要组成部分,特指物物相连的网络.具体地,物联网是指通过各种信息传感设备,如 ...

  2. Python 网络爬虫与信息获取(一)—— requests 库的网络爬虫

    1. 安装与测试 进入 cmd(以管理员权限),使用 pip 工具,pip install requests 进行安装: 基本用法: >> import requests >> ...

  3. [Recompose] When nesting affects Style

    In CSS we use the descendant selector to style elements based on their nesting. Thankfully in React ...

  4. Oracle 11g对依赖的推断达到字段级

    在Oracle 10g下,推断依赖性仅仅达到了对象级.也就是说存储过程訪问的对象一旦发生了变化.那么Oracle就会将存储过程置为INVALID状态.所以在为表做了DDL操作后.须要把存储过程又一次进 ...

  5. ITFriend创业败局(二):初创公司应该怎样分配股权

    说到金钱,中国人有句口头禅,"谈钱多伤感情".这句话非常能代表,在熟人之间,中国人不喜欢在金钱上"斤斤计较". 但是,对于一起出来创业,尤其是没有经验的年轻人来 ...

  6. AJAX代码格式

    var request; //XMLHttpRequest的创建 function createRequest(url){ if(window.XMLHttpRequest){ request = n ...

  7. Tricks(四十八)—— 注释一段代码

    为 if 的条件判断表达式,传一个永假的语句,来注释一段代码: # Python if False: ... ... ... # C/C++ if (false) { ... ... } 永远不要直接 ...

  8. JQuery 多个checkbox 只选中一个

    <form id="common-form"> <input name="check1" type="checkbox"/ ...

  9. 汉高澳大利亚matrix矩阵计算器

    我在梦中的超级计算机超级计算机锯,使用大量阵列的cpu记忆,完成并行计算.一个手机制造商由于使用普通机械提供的服务,往往造成停机.是铁道部列车网络售票的事实. 无法使用云服务.上万台计算机并行处理,因 ...

  10. 【noip模拟】Fancy Signal Translate (暴力 + 哈希)

    题目描述 FST是一名可怜的 OIer,他很强,但是经常 fst,所以 rating 一直低迷. 但是重点在于,他真的很强!他发明了一种奇特的加密方式,这种加密方式只有OIer才能破解. 这种加密方式 ...