﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-yeqing-文章分类-ace</title><link>http://www.cppblog.com/yeqing/category/2370.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 19 May 2008 21:02:13 GMT</lastBuildDate><pubDate>Mon, 19 May 2008 21:02:13 GMT</pubDate><ttl>60</ttl><item><title>修改ACE的日志宏涉及到的不定参数的使用</title><link>http://www.cppblog.com/yeqing/articles/11028.html</link><dc:creator>夜沁</dc:creator><author>夜沁</author><pubDate>Wed, 09 Aug 2006 01:11:00 GMT</pubDate><guid>http://www.cppblog.com/yeqing/articles/11028.html</guid><wfw:comment>http://www.cppblog.com/yeqing/comments/11028.html</wfw:comment><comments>http://www.cppblog.com/yeqing/articles/11028.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yeqing/comments/commentRss/11028.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yeqing/services/trackbacks/11028.html</trackback:ping><description><![CDATA[
		<p>
				<font color="#808080" size="2">修改ACE中的ACE_DEBUG宏</font>
		</p>
		<p>
				<font color="#808080" size="2">#define DEBUG_PREFIX ACE_TEXT("DEBUG%I")</font>
		</p>
		<p>
				<font color="#808080" size="2">#define MY_DEBUG(FMT, ...)    \<br />        ACE_DEBUG((LM_DEBUG, \<br />        DEBUG_PREFIX FMT \<br />        __VA_ARGS__ ))</font>
		</p>
		<p>
				<font color="#808080" size="2">缺省号代表一个可以变化的参数表。使用保留名 __VA_ARGS__ 把参数传递给宏。<br />当宏的调用展开时，实际的参数就传递给了。例如：</font>
		</p>
		<p>
				<font color="#808080" size="2">MY_DEBUG("YEQING")</font>
		</p>
		<p>
				<font color="#808080" size="2">MY_DEBUG()是一个可变参数宏，你能在每一次调用中传递不同数目的参数：</font>
		</p>
		<p>
				<font color="#808080" size="2">MY_DEBUG("YEQING ","IS ","A HANDSOME BOY");</font>
		</p>
		<p>
				<font color="#808080" size="2">可变参数宏不被ANSI/ISO C++ 所正式支持。因此，你应当检查你的编译器，看它是否支持这项技术。<br />至少在我自己测试的过程，VS6是不支持的<br />但是linux as3支持<br />使用的是gcc version 3.2.3 20030502 (Red Hat Linux 3.2.3-20)</font>
		</p>
<img src ="http://www.cppblog.com/yeqing/aggbug/11028.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yeqing/" target="_blank">夜沁</a> 2006-08-09 09:11 <a href="http://www.cppblog.com/yeqing/articles/11028.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ACE_TRACE无法显示消息</title><link>http://www.cppblog.com/yeqing/articles/10918.html</link><dc:creator>夜沁</dc:creator><author>夜沁</author><pubDate>Mon, 07 Aug 2006 03:12:00 GMT</pubDate><guid>http://www.cppblog.com/yeqing/articles/10918.html</guid><wfw:comment>http://www.cppblog.com/yeqing/comments/10918.html</wfw:comment><comments>http://www.cppblog.com/yeqing/articles/10918.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yeqing/comments/commentRss/10918.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yeqing/services/trackbacks/10918.html</trackback:ping><description><![CDATA[
		<p>
				<font color="#808080" size="2">我用的是APG自带的例子。无论在Windows和Linux操作系统下面都无法输出ACE_TRACE的信息？</font>
		</p>
		<p>
				<font color="#808080" size="2">源码：<br />----------------------------------------------------------<br />#include "ace/Log_Msg.h"</font>
		</p>
		<p>
				<font color="#808080" size="2">void foo (void);</font>
		</p>
		<p>
				<font color="#808080" size="2">int ACE_TMAIN (int, ACE_TCHAR *[])<br />{<br />ACE_TRACE(ACE_TEXT ("main"));</font>
		</p>
		<p>
				<font color="#808080" size="2">ACE_DEBUG ((LM_INFO, ACE_TEXT ("%IHi Momn")));<br />foo();<br />ACE_DEBUG ((LM_INFO, ACE_TEXT ("%IGoodnightn")));</font>
		</p>
		<p>
				<font color="#808080" size="2">return 0;<br />}</font>
		</p>
		<p>
				<font color="#808080" size="2">void foo (void)<br />{<br />ACE_TRACE (ACE_TEXT ("foo"));</font>
		</p>
		<p>
				<font color="#808080" size="2">ACE_DEBUG ((LM_INFO, ACE_TEXT ("%IHowdy Pardnern")));<br />}</font>
		</p>
		<p>
				<font color="#808080" size="2">输出：<br />---------------------------------------------------------<br />[root@myserver projs]# ./tmp<br />Hi Mom<br />Howdy Pardner<br />Goodnight</font>
		</p>
		<p>
				<font color="#808080" size="2">需要设置宏ACE_NTRACE，默认状态是不记录TRACE信息的。<br />#define ACE_NTRACE 0  记录日志<br />#define ACE_NTRACE 1  不记录日志</font>
		</p>
		<p>
				<font color="#808080" size="2">可以使用一下两种方法解决问题：<br />1、修改文件代码<br />#define ACE_NTRACE 0 <br />#include "ace/Log_Msg.h"</font>
		</p>
		<p>
				<font color="#808080" size="2">error：<br />记住不要把上面的顺序给写反呢<br />写成了：<br />#include "ace/Log_Msg.h"<br />#define ACE_NTRACE 0 </font>
		</p>
		<p>
				<font color="#808080" size="2">2、在编译命令上增加定义宏的命令<br />可以增加如下选项  -DACE_NTRACE</font>
		</p>
		<p>
				<font color="#808080" size="2">
				</font> </p>
<img src ="http://www.cppblog.com/yeqing/aggbug/10918.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yeqing/" target="_blank">夜沁</a> 2006-08-07 11:12 <a href="http://www.cppblog.com/yeqing/articles/10918.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我的第一个ACE测试例子</title><link>http://www.cppblog.com/yeqing/articles/10914.html</link><dc:creator>夜沁</dc:creator><author>夜沁</author><pubDate>Mon, 07 Aug 2006 02:04:00 GMT</pubDate><guid>http://www.cppblog.com/yeqing/articles/10914.html</guid><wfw:comment>http://www.cppblog.com/yeqing/comments/10914.html</wfw:comment><comments>http://www.cppblog.com/yeqing/articles/10914.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yeqing/comments/commentRss/10914.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yeqing/services/trackbacks/10914.html</trackback:ping><description><![CDATA[
		<p>
				<font color="#808080" size="2">#include "ace/OS.h"<br />#include "ace/Log_Msg.h"<br /> <br />int main (int argc, char *argv[])<br />{<br />  ACE_DEBUG((LM_DEBUG,"Hello, ACE!\n"));<br />  ACE_OS::exit(1);<br />  return 0;<br />}</font>
		</p>
		<p>
				<font color="#808080" size="2">使用VS6编译：</font>
		</p>
		<p>
				<font color="#808080" size="2">1、提示有“Cannot open include file: 'ace/SOCK_Acceptor.h':No such file or directory”<br />工程-设置-C/C++: Preprocessor,附加包含路径：H:\ACE\ACE-5.5\ACE_wrappers</font>
		</p>
		<p>
				<font color="#808080" size="2">2、提示有“ You must link against multi-threaded libraries when using ACE (check your project settings)”<br />工程-设置-C/C++: Code Generation - Use run-time library : Debug Multithreaded Dll</font>
		</p>
		<p>
				<font color="#808080" size="2">3、提示有“error C2065: 'ACE_ERROR' : undeclared identifier”<br />        error C2065: 'ACE_DEBUG' : undeclared identifier<br />#include "ace/Log_Msg.h"</font>
		</p>
		<p>
				<font color="#808080" size="2">4、提示error C4716: 'ace_main_i' : must return a value<br />在main中加入 return 0;</font>
		</p>
		<p>
				<font color="#808080" size="2">5、提示“error LNK2001: unresolved external symbol "__declspec(dllimport) int __cdecl”<br />工程-设置-Link-Input: 对象/库模块：添加ACEd.lib                         <br />附加库路径：H:\ACE\ACE-5.5\ACE_wrappers\lib  </font>
		</p>
		<p>
				<font color="#808080" size="2">使用linux编译：<br />makefile 文件如下：<br />ACE_LIB = $(ACE_ROOT)/ace</font>
		</p>
		<p>
				<font color="#808080" size="2">LFLAGS = -L$(ACE_LIB) -lACE<br />CFLAGS = -Wall -O2 -D NDEBUG<br />IFLAGS = -I $(ACE_ROOT) </font>
		</p>
		<p>
				<font color="#808080" size="2">OBJS = test_ace.o<br />       <br />all: test_ace.exe<br />          <br />test_ace.exe: $(OBJS) <br /> g++ -o $@ $(OBJS) $(LFLAGS)<br /> @echo done!<br />             <br />test_ace.o: test_ace.cpp<br /> g++ -c $(CFLAGS) $(IFLAGS) $&lt;<br />    <br />clean:<br /> @rm *.o *.exe<br /> @echo done! </font>
		</p>
<img src ="http://www.cppblog.com/yeqing/aggbug/10914.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yeqing/" target="_blank">夜沁</a> 2006-08-07 10:04 <a href="http://www.cppblog.com/yeqing/articles/10914.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ACE的安装</title><link>http://www.cppblog.com/yeqing/articles/10913.html</link><dc:creator>夜沁</dc:creator><author>夜沁</author><pubDate>Mon, 07 Aug 2006 01:46:00 GMT</pubDate><guid>http://www.cppblog.com/yeqing/articles/10913.html</guid><wfw:comment>http://www.cppblog.com/yeqing/comments/10913.html</wfw:comment><comments>http://www.cppblog.com/yeqing/articles/10913.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/yeqing/comments/commentRss/10913.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yeqing/services/trackbacks/10913.html</trackback:ping><description><![CDATA[
		<p>
				<font color="#808080" size="2">在VS6上编译ACE的方法</font>
		</p>
		<p>
				<font color="#808080" size="2">1.下载最新的ACE Release版本压缩包，解压后目录为: ACE-版本号\ACE_wrappers\<br />2.加载工程文件，目录: ACE_wrappers\ace\ace.dsw<br />3.新建 config.h 文件到 ACE_wrappers\ace目录下<br />4.添加包含头文件声明: #include "ace/config-win32.h"<br />5.添加宏定义 (注意:添加在 #include 之前)<br /> (1).#define ACE_HAS_WINNT4 0  //OS不是NT4.0或以后版本<br /> (2).#define ACE_HAS_STANDARD_CPP_LIBRARY 1  //使用标准C++库<br /> (3).#define ACE_HAS_MFC 1          //使用MFC库<br /> (4).#define THR_USE_AFX 1          //使用CWinThread产生新的线程类<br /> (5).#define ACE_USES_STATIC_MFC  1 //静态连接MFC库<br /> (6).#define ACE_AS_STATIC_LIBS   1 //生成静态的ACE库<br /> (7).#define ACE_NO_INLINE          //是否使用内联函数在静态库内<br />6.编译得到.lib和.dll文件</font>
		</p>
		<p>
				<font color="#808080" size="2">好象使用时有个问题，不知道大家有没有碰到过:<br />1. 在使用ACE发布Release版本程序时，<br />TryEnterCriticalSection导致无法编译的问题</font>
		</p>
		<p>
				<font color="#808080" size="2">解决方法:<br />  (1). 工程 Project--&gt;setting--&gt;C/C++  写入:_WIN32_WINNT=0x0500<br />  (2).包含头文件为:windows.h</font>
		</p>
		<p>
				<font color="#808080" size="2">
				</font> </p>
		<p>
				<br />
				<font color="#808080" size="2">如果有“Cannot open include file: 'ace/SOCK_Acceptor.h':No such file or directory”<br />工程-设置-C/C++: Preprocessor,附加包含路径：D:/ACE_wrappers</font>
		</p>
		<p>
				<font color="#808080" size="2">如果有“ You must link against multi-threaded libraries when using ACE (check your project settings)”<br />工程-设置-C/C++: Code Generation - Use run-time library : Debug Multithreaded Dll</font>
		</p>
		<p>
				<font color="#808080" size="2">如果有“error C2065: 'ACE_ERROR' : undeclared identifier”<br />        error C2065: 'ACE_DEBUG' : undeclared identifier<br />#include "ace/Log_Msg.h"</font>
		</p>
		<p>
				<font color="#808080" size="2">error C4716: 'ace_main_i' : must return a value<br />    在main中加入<br />        return 0;</font>
		</p>
		<p>
				<font color="#808080" size="2">“error LNK2001: unresolved external symbol "__declspec(dllimport) int __cdecl”<br />工程-设置-Link-Input: 对象/库模块：添加aced.lib                         <br />附加库路径：D:\ACE_wrappers\ace                 <br />                    <br />编译client中遇到的问题<br />1、error C2039: 'sprintf' : is not a member of 'ACE_OS'<br />    <br />    #include "ace/OS_NS_stdio.h"<br />    <br />2、error C2039: 'strlen' : is not a member of 'ACE_OS'</font>
		</p>
		<p>
				<font color="#808080" size="2">    #include "ace/OS_NS_string.h"<br />3、error C2059: syntax error : '?'<br />    错误在这一句：  ACE_DEBUG((LM_DEBUG,?Usage egX &lt;hostname&gt; &lt;port_number&gt;\n?)); <br />    将?改为"<br />    <br />4、无法找到动态链接库aced.dll于指定的路径<br />    为系统变量PATH加上D:\ACE_wrappers\bin<br />    <br />    <br />    <br />静态包含：<br />   工程-设置-C/C++-预处理程序定义中加入 ,ACE_AS_STATIC_LIBS<br />   <br />*********************************************************************************</font>
		</p>
		<p>
				<font color="#808080" size="2">在Linux系统中安装和配置ACE</font>
		</p>
		<p>
				<font color="#808080" size="2">准备工作：</font>
		</p>
		<p>
				<font color="#808080" size="2">1.确保你的Linux操作系统的开发环境(gcc、make……)是完整且可用的。<br />2.在安装ACE的过程中，可能需要root权限，因此确保你拥有root帐户的密码。<br />3.对于典型的Redhat9系统，autoconf程序的版本可能过低，你需要首先升级它。</font>
		</p>
		<p>
				<font color="#808080" size="2">   升级的步骤如下：</font>
		</p>
		<p>
				<font color="#808080" size="2">在控制台中输入 autoconf -V，查看你的autoconf程序的版本 <br />如果低于2.57g，你需要到</font>
				<a href="http://www.gnu.org/software/autoconf/">
						<font color="#808080" size="2">http://www.gnu.org/software/autoconf/</font>
				</a>
				<font color="#808080" size="2">去下载最新版本的autoconf程序，目前autoconf程序的版本是2.59 <br />根据tarball中的安装说明，编译并安装升级autoconf程序<br />开始安装：</font>
		</p>
		<p>
				<font color="#808080" size="2">经过上面的准备工作，现在你已经具备了安装ACE的条件。下面开始正式的安装工作。</font>
		</p>
		<p>
				<font color="#808080" size="2">首先确定ACE的安装路径，并建立相应的目录。<br />这里，我们把ACE安装在/home/zhc/ace/的目录下，先执行<br />mkdir /home/zhc/ace <br />然后将获得的ACE源代码包解至该目录下。<br />tar zxvf ACE-5.4.tar.gz /home/zhc/ace <br />这时，在ace的目录下会建立一个名为ACE_wrappers的子目录，ACE所有的源代码、工具、和例子都在这个目录中。<br />先进入该目录，执行<br />cd /home/zhc/ace/ACE_wrappers<br />然后建立一个子目录，用于存放ACE编译后的目标文件<br />mkdir build<br />cd build <br />接着,执行configure脚本，检查你的系统环境，配置并生成适合你的系统的Makefile文件。<br />在执行configure脚本时，可以加入许多配置选项，其详细说明可以参看ACE_wrappers目录下的ACE-INSTALL.html文件，<br />对于Redhat9系统来说，不必加任何参数，ACE就可以很好的工作了。<br />../configure <br />在漫长的检查和配置之后，如果没有什么问题，你就可以开始编译了。<br />这一步很简单，执行<br />make<br />然后，泡一杯茶，静静的等待就行了。 <br />如果编译顺利的通过(通常都会是这样的)，那么恭喜你，你已经成功了一大半了，下面要做的仅仅是以些配置工作而已。<br />接下来的工作是安装，这一步是可选的，目的是把编译生成的ACE的库文件、头文件和手册页等安装到/usr/local的相应目录中去，为了今后使用的方便，我建议你还是进行这一步，执行<br />su<br />root's password<br />make install <br />安装之后，我们就可以进行最后的配置工作了。<br />首先设置环境变量ACE_ROOT，执行<br />setenv ACE_ROOT /home/zhc/ace/ACE_wrappers<br />注意其中的路径要根据你的实际情况而定<br />如果你不想每次都手工设定路径，可以编辑你的bash的配置文件，执行<br />cd<br />vi .bash_profile<br />在其中填加如下两行<br />ACE_ROOT=/home/work/research/ace/ACE_wrappers<br />export ACE_ROOT <br />然后，在$ACE_ROOT/ace目录中创建一个名为config.h的文件，在其中包含如下一行<br />#include "ace/config-linux.h"<br />或者，简单起见，你也可以直接建立一个指向config-linux.h的符号链接，执行<br />ln -s config-linux.h config.h <br />同样，在$ACE_ROOT/include/makeinclude目录中创建一个名为platform_macros.GNU的文件，在其中包含如下一行<br />include $(ACE_ROOT)/include/makeinclude/platform_linux.GNU<br />或者，简单起见，你也可以直接建立一个指向platform_linux.GNU的符号链接，执行<br />ln -s platform_linux.GNU platform_macros.GNU <br />最后一步，设置环境变量LD_LIBRARY_PATH，执行<br />setenv LD_LIBRARY_PATH $ACE_ROOT/ace:$ACE_ROOT/lib:/usr/local/lib:$LD_LIBRARY_PATH<br />或者在~/.bash_profile文件中添加如下两行<br />LD_LIBRARY_PATH=$ACE_ROOT/ace:$ACE_ROOT/lib:/usr/local/lib:$LD_LIBRARY_PATH<br />export LD_LIBRARY_PATH<br />安装完成：</font>
		</p>
		<p>
				<font color="#808080" size="2">经过上面的步骤，ACE已经安装到了您的系统上了，<br />下面我们将编译并执行ACE的例程以验证我们的工作。<br />这里我们以《C++网络编程，卷一》所带的例子为例。</font>
		</p>
		<p>
				<font color="#808080" size="2">进入例程目录，执行<br />cd $(ACE_ROOT)/examples/C++NPv1 <br />编译例子程序，执行<br />make<br />如果前面的安装和配置正确，很快就能够得到编译后的例子程序。 <br />分别执行一个服务器程序(随便哪一个都行)和一个客户端程序(Logging_Client)，<br />如果程序运行正确，说明前面的安装和配置成功，下面你就可以开始你的ACE学习之旅了</font>
		</p>
		<p>
				<font color="#808080" size="2">
				</font> </p>
<img src ="http://www.cppblog.com/yeqing/aggbug/10913.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yeqing/" target="_blank">夜沁</a> 2006-08-07 09:46 <a href="http://www.cppblog.com/yeqing/articles/10913.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>