首页 > 代码库 > VS2008(VC9)基于OpencasCade发布软件 以及 sxstrace.exe 工具的使用
VS2008(VC9)基于OpencasCade发布软件 以及 sxstrace.exe 工具的使用
关键字:
※. 在Release版本中, “在共享DLL中使用MFC”----程序能编译成功, 但如果使用 “在静态库中使用MFC”-- Build失败,出现各种连接错误。
※. 在别的Windows机器上运行,运行,出现错误如下 "应用程序正常初始化(Oxc0150002)失败 ,请单击确定关闭应用程序,"
这就是在本次使用VS2008发布软件过程中碰到的问题。这两个问题的解决,持续了两个月之久。现在终于将问题解决了。现将问题解决过程记录如下:
1. 背景是这样:使用VS2008基于OpenCasCade几何引擎开发了一款三维建模软件,由于OpenCasCade包含的库以及第三方库太多,所以在目标机上采用直接先安装OpenCasCade Technology的方式(免去复制各种库的烦恼),再安装VS发布的软件。 碰到的第一个问题就是
在Release版本中, “在共享DLL中使用MFC”----程序能编译成功, 但如果使用 “在静态库中使用MFC”-- Build失败
主要表现:当在项目属性中,设置在共享DLL中使用MFC时,程序能够正常编译。但是当设置成为 在静态库中使用MFC时,出现以下这种连接错误。
为了解决以上错误,查了很多资料,网上大部分的资料都是说lib库设置不正确云云。所以各种设置lib,但都不好用。 最后突然得到如下真经,问题解决。
在Preprocessor中定义_AFXDLL, PROJECT->SETING->C/C++->PREPROCESSOR->定义 _AFXDLL,完毕。
如果它提示:fatal error C1189: #error : Please use the /MD switch for _AFXDLL builds
就这样改:C/C++->Code Generation->Multithread DLL (即实现/MD选项).
其实从 http://blog.csdn.net/educast/article/details/9858015 中我们可以知道,并不是我们干了什么,其实我们只是换了种方式设置动态库而已。
2. 既然VS能发布Release版本的运行程序,那就直接发布,生成目标exe文件,在本实验中,生成的是Ocaf.exe文件。
3. 将可执行文件Ocaf.exe 拷贝到其他主机上(这里,其他主机有两点要求 1, windows OS, 2 已经安装好OpenCasCade Technology)。高高兴兴地一运行Ocaf.exe,出现以下错误
顿时心伤无比,因为Ocaf.exe在原来机器上运行得好好地。怎么跑到其他机器上就不行了呢。。
4. 伤心过后,继续调试。 由于属于应用程序错误,所以查看系统日志(开始->控制面板->计算机管理->事件查看器->应用程序,这是XP查看系统日志的方法。win7 查看系统日志方法。 开始->控制面板->系统与安全->管理工具->查看事件日志),探究一下究竟是什么问题。
发现如下问题
是一个SideBySide类型的错误,从 http://www.cnblogs.com/killmyday/articles/1394596.html 中了解一下这类错误的原因。
所以根据指示,不得不学着使用sxstrace.exe工具来进行星系诊断!
5. 接下来使用sxstrace.exe工具,在win7中,使用管理员身份运行 cmd.exe
进入命令行过后,运行:
sxstrace.exe Trace -logfile:test.log
回车
这时候开启了sxstrace监听程序,这时候,再将Ocaf.exe这个可执行文件运行一次,当然依然报 ”应用程序正常初始化(Oxc0150002)失败 ,请单击确定关闭应用程序“这个错误。 但不要紧。关闭这个错误,回到命令行。点击回车,结束监听。
这时候,已经在当前目录下生成了一个test.log的日志文件,但这个无法打开,所以需要运行:
sxstrace.exe Parse -logfile:test.log -outfile:test.txt
回车
通过这样,把test.log 转换到test.txt中,这样就可以阅读test.log中的信息了。
6 test.log中信息基本上都是这样子的
这就是刚才那个 “Oxc0150002)失败”错误产生的原因。 仔细阅读可以看到以下信息:
从这上面可以看出,系统尝试从C:\Windows\system32\Microsoft.VC90.DebugCRT目录下找几个文件,可是失败了。
然后手动打开Windows\system32中一看,居然没有所说的Microsoft.VC90.DebugCRT这个文件夹。
问题终于找到了!!!
所以这时候,从源机器上(VS发布程序的这台机器)上,在VS的安装目录
C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\x86
下,就有这个文件夹,Microsoft.VC90.DebugCRT。 果断复制,然后粘贴到目标主机的 Windows\system32下面,再运行。
一切OK!。
7 。 然后整个问题终于解决,项目也算是能交付了。 哈哈,一路走来,实属不易! 一句话
越努力,越幸运!