ACE6.0的安装_出错处理_检验

本文详细介绍了在Windows平台上安装和编译ACE的过程,包括环境设置、代码配置及常见问题解决,旨在帮助开发者顺利搭建ACE开发环境。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自http://blog.youkuaiyun.com/zhaohaidao/article/details/6330273

步骤:

1.       安装VS2008

2.       下载ACE

3.       新建config.h  并写入

#define ACE_HAS_STANDARD_CPP_LIBRARY 1

//#define ACE_HAS_MFC 1(这句须注掉,不然会有内存泄露)

#include "ace/config-win32.h"并保存于D:/ACE_wrappers

4.       添加环境变量 ACE_ROOT 变量值D:/ACE_wrappers

5.       打开D:/ACE_wrappers/ace/ACE_vc9.sln

6.       工具—选项—VC++目录

包含文件中添加 $(ACE_ROOT)

引用文件中添加 $(ACE_ROOT)/lib

库文件    添加 $(ACE_ROOT)/lib

源文件    添加 $(ACE_ROOT)/ace

7.       编译,如无意外,应该能编译成功

8.       新建win32控制台应用程序—空项目,源文件右键新建C++ CPP文件。

写入hello world 程序

 

 

途中所遇问题:

1.  环境变量的设置。

2.  路径混乱。

3.  error PRJ0003 :生成“cmd.exe”时出错。 导致原因,将工具—选项—VC++目录下可执行文件中$(Path)不小心删除,系统路径出错。

注意1:

ACE项目的字符集设置是"未设置",而VS2005的c++项目默认字符集是"使用Unicode字符集",如果用到了ACE链接库时需要将字符集改为"未设置"(在"项目属性->配置属性->常规->字符集"中配置),否则可能出现链接错误。

至此,ACE的安装工作便算完成,希望这篇文章对大家安装ACE有点帮助。

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

支持unicode的ACE编译

编译前在config.h中多添加如下两行,并且将项目默认字符集改为"使用Unicode字符集"。
      #define ACE_USE_WCHAR
      #define ACE_HAS_WCHAR

注意2:

在windows平台下,如果没有定义如上两个宏,ACE会自动将main函数重定义,并主动替你把ACE::init()和ACE::fini()调用好。添加这两个宏后,需要在main函数中手动调用。

main函数重定义这一行为不能保证在所有平台和环境下都正常运作(如使用MFC时),其实不管如何,不妨在main函数的开头和结尾分别再调用一次ACE::init()和ACE::fini()。ACE::init()和ACE::fini()里面都有嵌套层次计数机制,因此只要它们能够保证成对出现,并且不出现交叉嵌套,多调用一遍并不会出现任何问题。

 

 

检验

// serverMain.cpp

// 如果是WIN32平台上报错
// f:\ace\ace_wrappers\ace\config-win32-common.h(23): fatal error C1189: #error :  Please define WIN32 in your project settings.
// 可以文件头添加WIN32的预定义解决
#ifndef WIN32
#define WIN32
#endif

// 针对Debug版和Release版进行不同预处理
#ifdef _DEBUG
#pragma comment(lib,"ACEd.lib")
#else
#pragma comment(lib,"ACE.lib")
#endif

#include <ace\Log_Msg.h>
#include <ace\Time_Value.h>
#include <ace\SOCK_Acceptor.h>
#include <ace\SOCK_Stream.h>
#include <ace\OS_NS_stdlib.h>

#define SIZE_DATA 18
#define SIZE_BUF 1024
#define NO_ITERATIONS 5

class Server
{
public:
	Server (int port): server_addr_(port),peer_acceptor_(server_addr_)
	{
		data_buf_= new char[SIZE_BUF];
	}
	
	//Handle the connection once it has been established. Here the
	//connection is handled by reading SIZE_DATA amount of data from the
	//remote and then closing the connection stream down.
	int handle_connection()
	{
		// Read data from client
		for(int i=0;i<NO_ITERATIONS;i++)
		{
			int byte_count=0;
			if( (byte_count=new_stream_.recv_n (data_buf_, SIZE_DATA, 0))==-1)
				ACE_ERROR ((LM_ERROR, "%p\n", "Error in recv"));
			else
			{
				data_buf_[byte_count]=0;
				ACE_DEBUG((LM_DEBUG,"Server received %s \n",data_buf_));
			}
		}
		// Close new endpoint
		if (new_stream_.close () == -1)
			ACE_ERROR ((LM_ERROR, "%p\n", "close"));
		return 0;
	}
	
	//Use the acceptor component peer_acceptor_ to accept the connection
	//into the underlying stream new_stream_. After the connection has been
	//established call the handle_connection() method.
	int accept_connections ()
	{
		if (peer_acceptor_.get_local_addr (server_addr_) == -1)
			ACE_ERROR_RETURN ((LM_ERROR,"%p\n","Error in get_local_addr"),1);
		ACE_DEBUG ((LM_DEBUG,"Starting server at port %d\n",
			server_addr_.get_port_number ()));
		// Performs the iterative server activities.
		while(1)
		{
			ACE_Time_Value timeout (ACE_DEFAULT_TIMEOUT);
			if (peer_acceptor_.accept (new_stream_, &client_addr_, &timeout)== -1)
			{
				ACE_ERROR ((LM_ERROR, "%p\n", "accept"));
				continue;
			}
			else
			{
				ACE_DEBUG((LM_DEBUG,
					"Connection established with remote %s:%d\n",
					client_addr_.get_host_name(),client_addr_.get_port_number()));
				//Handle the connection
				handle_connection();
			}
		}
	}
private:
	char *data_buf_;
	ACE_INET_Addr server_addr_;
	ACE_INET_Addr client_addr_;
	ACE_SOCK_Acceptor peer_acceptor_;
	ACE_SOCK_Stream new_stream_;
};

int main (int argc, char *argv[])
{
	if(argc<2)
	{
		ACE_ERROR((LM_ERROR,"Usage %s <port_num>", argv[0]));
		ACE_OS::exit(1);
	}
	Server server(ACE_OS::atoi(argv[1]));
	server.accept_connections();
	return 0;
}

 

 

 

转自http://blog.youkuaiyun.com/stanjiang2010/article/details/6106708
 ACE的编译与安装(windows篇)

(一)源码包的获取

 

1、下载最新的ACE源码包,我的是ACE+TAO+CIAO-6.0.0.tar.gz;

 

2、解压至一目录如:D:/ACE_wrappers;

 

(二)设置环境变量

 

1、在操作系统添加一个名为ACE_ROOT的用户环境变量,值为刚才ace的解压路径D:、ACE_wrappers

2、添加用户的Path环境变量,值为%ACE_ROOT%/lib,这样才能保证系统能找到ace生成的动态连接库;

 

3、设置VS2005的C++开发项目信息,依次打开菜单 工具-选项-项目和解决方案-VC++目录 ,在右侧目录列表中选择"包含目录",添加$(ACE_ROOT),在右侧目录列表中选择"库文件",添加$(ACE_ROOT)/lib

 

(三)编译ACE

 

1、在ACE_ROOT/ace目录创建一个名为 config.h的文件。编辑文件并加入以下内容
#define ACE_HAS_STANDARD_CPP_LIBRARY 1
#include "ace/config-win32.h"
其中第一行是因为我想用标准C++跨平台,第二行则是必须要的,表明当前是在win32的环境下进行ace的项目

 

2、进入ACE_ROOT/ace目录中,能发现ACE现在已经带VS2005的编译项目了,直接打开ace_vc8.sln,直接生成ACE项目的Debug版和Release版;

 

(四)设置编译环境

1、配置属性->链接器->常规->附加依赖项,添入ACEd.lib(ACE.lib);

2、如果运行时报没有找到ACEd.dll的错误,则需在检查环境变量path中路径是否设置正确;

(五)例子

#include "ace/ACE.h"
#include "ace/OS_NS_stdio.h"
#include <iostream>
using namespace std;
int main (int argc, char *argv[])
{
    char msg[100] = {0};
    ACE_OS::sprintf(msg, "hello %s ", "world");
    cout << msg << endl;
    system("pause");
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值