最近在windows 7 + vs 2008下搭建ACE的环境,遇到了若干问题,下面将其列出并给出相应的解决办法(当然主要是google了)。
主要是参考文章:ACE 安装指南及示例 的步骤进行。
在编译ACE工程文件过程中,碰到的第一个问题是类似下面的错误:
1>e:/vrmarinemy/scene3d.h(91) : error C2146: 语法错误 : 缺少“;”(在标识符“m_TreeManager”的前面)
1>e:/vrmarinemy/scene3d.h(91) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>e:/vrmarinemy/scene3d.h(91) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
在网上查了下,问题搞了好久才解决,开始还怀疑过是操作系统的问题(我用的是windows 7),或者是工具vs 2008的不同的问题,甚至怀疑过是ACE源文件中本身有问题。
最后在检查的时候发现:安装过程中有一步是,新建一个config.h文件。加入一句话#include "config-win32.h"。
而源代码ACE_wrappers/ace目录下已经有这样的一个文件config.h,所以我之前就想当然的在该文件中加了#include "config-win32.h";但是事实上这就是导致出现第一个问题的原因。我把该目录下本来就有的config.h删掉,重新建了这个文件,并加入包含的头文件信息,第一个问题就解决了。
碰到的第二个问题就是
在编译ACE源文件过程中出现错误:error C2471: 无法更新程序数据库
在网上搜索得到的解决方法是参考的这篇文章:
{
http://blog.csdn.net/zhuangshn/archive/2010/04/23/5520324.aspx
vs2005下的程序移到vs2008中,出现error C2471: 无法更新程序数据库“d:/Work/ Project/FBReader/debug/vc90.pdb”
fatal error C1083: 无法打开程序数据库文件:“d:/Work/ Project/FBReader/debug/vc90.pdb”: No such file or directory ..
解决方案:修改项目属性 右击项目 --> "属性”
1. “C/C++” --> "常规” -->”调试信息格式” 设置为 “C7 兼容(/Z7)”
2. “C/C++” --> "代码生成” -->”启用字符串池” 设置为 “是(/GF)”
3. “链接器” --> "调试” -->”生成调试信息” 设置为 “是(/DEBUG)”
}
编译完成之后就是编写自己的工程项目以便测试生成的ACE库文件是否可以供自己的应用程序使用了,
新建一个工程ACETest1,源代码如下:
在编译该项目的时候,要配置
右键该项目-属性, 配置属性->链接器->常规->附加库目录"C:/1 work/ALLOCS/source code/ACE_wrappers/ACE_wrappers/lib"
配置属性->链接器->输入->附加依赖项,添入ACEd.lib
在编译ACE库 过程中还有个问题要注意的是(可能使用的是window 7系统+vs2008的缘故吧,记得搜索到过好像是系统bug):右键ACE项目-属性, 配置属性->链接器->常规->启用增量链接,设置为否(/INCREMENTAL:NO)。注意:只是在编译ACE等库项目的时候需要这么设置,而自己建立的工程项目不需要设置。
否则会在链接的过程中报错:
否则可能出现类似下面的错误:
LINK : 没有找到 C:/Documents and Settings/ztne/My Documents/Visual Studio 2005/Projects/DirectXStudy/Debug/Draw.dll 或上一个增量链接没有生成它;正在执行完全链接
还有就是在生成该项目之前还要设置项目依赖项,右键 ACETest1- 项目依赖项,项目ACETest1 依赖于项目 ACE。
右键该项目,并完成项目的生成。
但是在运行该项目的时候,又出现了:无法启动此程序,因为计算机中丢失ACEd.dll。尝试重新安装此程序以解决此问题。
当时没有找到解决的方法。但是知道是由于环境变量设置的原因,把生成的ACETest1.exe拷贝到生成ACEd.dll的目录下,运行没有问题。
自己环境变量设置也没有问题啊,
1.在操作系统添加一个名为ACE_ROOT的系统环境变量,值为刚才ace的源文件路径C:/1 work/ALLOCS/source code/ACE_wrappers/ACE_wrappers
2.添加系统Path环境变量,值为%ACE_ROOT%/lib,这样才能保证系统能找到ace生成的动态连接库。
但是编译生成后总出现上述的错误。
第二天重启后发现程序编译生成并运行的时候没有问题了,原来我是在打开vs2008之后,才设置的系统环境变量,只有重启vs2008,设置的系统环境变量才会生效。
至此,终于完成了ACE的环境搭建。