首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

ACE应用程序不能正常启动解决方案

2012-03-18 
ACE应用程序不能正常启动#include ace/Thread.h#include ace/Synch.h#pragma comment(lib, ACEd.lib

ACE应用程序不能正常启动
#include "ace/Thread.h"
#include "ace/Synch.h"

#pragma comment(lib, "ACEd.lib")


#include <iostream>
using namespace std;
void* worker(void *arg) 
{
for(int i=0;i<10;i++)
  {
  ACE_OS::sleep(1);
  cout<<endl<<"hello world"<<endl;
  }
return NULL; 

int main(int argc, char *argv[]) 

  ACE_thread_t threadId;
  ACE_hthread_t threadHandle;
  ACE_Thread::spawn(
  (ACE_THR_FUNC)worker, //线程执行函数
  NULL, //执行函数参数
  THR_JOINABLE | THR_NEW_LWP,
  &threadId,
  &threadHandle
  );
  ACE_Thread::join(threadHandle);
return 0; 


这段代码编译成功,但是运行的时候提示"应用程序不能正常启动",请高手帮忙解决下,多谢了~~~


[解决办法]
我用ACE的时候也遇到过类似问题,这是ACE和CRT版本绑定的问题,LZ可以参考这个解决方案。

C/C++ code
解决方案  知道了程序依赖于具体哪一个dll以后,你可以将所依赖的dll拷贝到程序的安装文件夹里面,以CRT库绑定失败为例,介绍解决步骤:1.         从上例中我们知道程序依赖的Microsoft.VC90.DebugCRT库,版本号是9.0.21022.8,需要32位机器版本的CRT。这个依赖项一般是因为你的程序是调试版,所以Visual Studio在编译的时候,将调试版的CRT加入程序的依赖项。2.         从Visual Studio的安装文件夹里面将D:"Program Files"Microsoft Visual Studio 9.0"VC"redist"Debug_NonRedist"x86中的Microsoft.VC90.DebugCRT整个文件夹拷贝到应用程序所在的文件夹里面,注意:a)         如果你的程序依赖的是32位的CRT,则要拷贝x86文件夹里面的Microsoft.VC90.DebugCRT文件夹,如果是先x64程序,则要拷贝x64文件夹里面。b)         你需要确定Microsoft.VC90.DebugCRT文件夹里面的Microsoft.VC90.DebugCRT.manifest文件里面保存的版本信息而你程序依赖的版本信息匹配,Microsoft.VC90.DebugCRT.manifest里面的版本信息大版本号一定要一致,小版本号一定要等于或者大于你程序依赖的CRT的小版本号。比如上例中,我们的程序是依赖于CRT 9.0.21022.8,而我们的Microsoft.VC90.DebugCRT.manifest的版本是9.0.30729.1,这样是可以的;而8.0.30729.1就会有问题。如果大版本号一样,小版本号不一致的话,一个比较简单的方案就是修改程序的manifest文件,使其互相匹配就可以了。3.         如果你的程序不是依赖调试版本的CRT,而是release版本的CRT,直接去微软的官方网站下载一个crt redist包安装上就可以了。
[解决办法]
乱码了 直接贴原文吧。

http://www.acejoy.com/bbs/viewthread.php?tid=1428

热点排行