﻿<?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++博客-风轻云淡</title><link>http://www.cppblog.com/wc250en007/</link><description>风轻云淡</description><language>zh-cn</language><lastBuildDate>Thu, 16 Apr 2026 07:34:14 GMT</lastBuildDate><pubDate>Thu, 16 Apr 2026 07:34:14 GMT</pubDate><ttl>60</ttl><item><title>Synergy 一套键鼠同时控制多台电脑(开源免费，支持Win/Mac/Linux)(转)</title><link>http://www.cppblog.com/wc250en007/archive/2012/11/14/195194.html</link><dc:creator>风轻云淡</dc:creator><author>风轻云淡</author><pubDate>Wed, 14 Nov 2012 07:02:00 GMT</pubDate><guid>http://www.cppblog.com/wc250en007/archive/2012/11/14/195194.html</guid><wfw:comment>http://www.cppblog.com/wc250en007/comments/195194.html</wfw:comment><comments>http://www.cppblog.com/wc250en007/archive/2012/11/14/195194.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wc250en007/comments/commentRss/195194.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wc250en007/services/trackbacks/195194.html</trackback:ping><description><![CDATA[<p style="margin: 25px 0px 0px; color: #686868; font-family: Tahoma, 'Microsoft YaHei', Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 24px; background-color: #ffffff;">想必很多人都拥有多台电脑，譬如台式机+<a href="http://www.iplaysoft.com/go/notebook" target="_blank" style="text-decoration: initial; color: #0086e3;">笔记本</a>，很多时候我们都会同时打开它们工作。可是你有没发现，如果桌子上摆放着多台电脑多套<a href="http://www.iplaysoft.com/go/keyboardmouse" target="_blank" style="text-decoration: initial; color: #0086e3;">键盘鼠标</a>，不停来回切换使用是否很累呢？如果说现在可以只用一套键鼠，就能同时控制你全部的电脑，你会否兴奋？</p><p style="margin: 25px 0px 0px; color: #686868; font-family: Tahoma, 'Microsoft YaHei', Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 24px; background-color: #ffffff;"><a href="http://www.iplaysoft.com/synergy.html" style="text-decoration: initial; color: #0086e3;">Synergy</a>&nbsp;正是为此而生的好工具！<strong><span style="color: red;">它可以让你的多台电脑</span><a href="http://www.iplaysoft.com/tag/%E5%85%B1%E4%BA%AB" target="_blank" style="text-decoration: initial; color: #0086e3;"><span style="color: red;">共享</span></a><span style="color: red;">一套键鼠，甚至</span><span style="color: red;">还可以共享剪贴板</span><span style="color: red;">，</span></strong>而你只需动动鼠标，指针就可以轻松地在各台电脑屏幕之间来回穿梭，就像一台电脑使用多个显示器一样。而且 Synergy 完全免费开源，并跨平台支持&nbsp;<a href="http://www.iplaysoft.com/tag/windows" target="_blank" style="text-decoration: initial; color: #0086e3;">Win</a>/<a href="http://www.iplaysoft.com/tag/mac" target="_blank" style="text-decoration: initial; color: #0086e3;">Mac</a>/<a href="http://www.iplaysoft.com/tag/linux" target="_blank" style="text-decoration: initial; color: #0086e3;">Linux</a>，相当给力！ 使用之后，工作<a href="http://www.iplaysoft.com/tag/%E6%95%88%E7%8E%87" target="_blank" style="text-decoration: initial; color: #0086e3;">效率</a>提高，腿不酸腰不疼，桌面也干净了，绝对是绝世神器啊！</p><h3>Synergy 的使用方法：</h3><p style="margin: 25px 0px 0px; color: #686868; font-family: Tahoma, 'Microsoft YaHei', Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 24px; background-color: #ffffff;">我的桌子上有1个台式机 (<a href="http://www.iplaysoft.com/tag/windows" target="_blank" style="text-decoration: initial; color: #0086e3;">Windows7</a>) 和1个&nbsp;<a href="http://www.iplaysoft.com/go/macbookpro" target="_blank" style="text-decoration: initial; color: #0086e3;">MacBook Pro</a>&nbsp;笔记本 (<a href="http://www.iplaysoft.com/tag/mac" target="_blank" style="text-decoration: initial; color: #0086e3;">Mac OSX</a>)，偶尔还会用到另外一台笔记本 (Linux/Win双系统) 同时协同工作，这时候桌子上的键鼠们开始打架了，3个鼠标+2个键盘，还要不断移动身体去迁就电脑的位置。这时候就可以，或者说是非常需要 Synergy 来解放这种痛苦了！OK，开始吧&#8230;&#8230;</p><p style="margin: 25px 0px 0px; color: #686868; font-family: Tahoma, 'Microsoft YaHei', Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 24px; background-color: #ffffff;"><img title="Synergy" src="http://img.iplaysoft.com/wp-content/uploads/2011/56c33ebd6aad_D56C/splash.jpg" alt="Synergy" width="648" height="300" border="0" style="border: 0px; background-image: none; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; padding-top: 0px;" /></p><p style="margin: 25px 0px 0px; color: #686868; font-family: Tahoma, 'Microsoft YaHei', Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 24px; background-color: #ffffff;">Synergy 有一个使用前提，就是你的应用环境中的多台电脑需要在同一<a href="http://www.iplaysoft.com/tag/%E5%B1%80%E5%9F%9F%E7%BD%91" target="_blank" style="text-decoration: initial; color: #0086e3;">局域网</a>内。譬如说，家里使用一个路由器共享上网的，其下的全部电脑一般就是在同一局域网内。关于局域网的知识就不再在此阐述了，估计大家都知道怎么组网吧。</p><p style="margin: 25px 0px 0px; color: #686868; font-family: Tahoma, 'Microsoft YaHei', Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 24px; background-color: #ffffff;">虽然&nbsp;<a href="http://www.iplaysoft.com/synergy.html" style="text-decoration: initial; color: #0086e3;">Synergy</a>&nbsp;的配置和使用其实并不难，但目前它只有英文界面，而且界面我个人感觉做得不是很易用，可能新手咋看上去有点晕，我大概说说它是怎么个运作的吧。当然，这事也不能说得太细，不然大家就没得折腾了，这一没折腾，很多人就没人生乐趣了，到时候黑着脸来找我就不好。</p><h3>设置服务器端：</h3><p style="margin: 25px 0px 0px; color: #686868; font-family: Tahoma, 'Microsoft YaHei', Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 24px; background-color: #ffffff;">为了简单起见，我现在只选用已经在同一局域网下的&nbsp;<a href="http://www.iplaysoft.com/go/macbook" target="_blank" style="text-decoration: initial; color: #0086e3;">Macbook Pro</a>&nbsp;和 PC 两台电脑，而且为了教程更通用，我把MBP也切换到Win7系统 (就是现在两台电脑都是Win7了)，在它们中都安装好&nbsp;<a href="http://www.iplaysoft.com/synergy.html" style="text-decoration: initial; color: #0086e3;">Synergy</a>&nbsp;之后，那么我们先要挑一台使用键鼠的机器设置为服务器端，这里是我的台式机。如图：</p><p style="margin: 25px 0px 0px; color: #686868; font-family: Tahoma, 'Microsoft YaHei', Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 24px; background-color: #ffffff;"><img title="Synergy服务器端" src="http://img.iplaysoft.com/wp-content/uploads/2011/56c33ebd6aad_D56C/1.png" alt="Synergy服务器端" width="461" height="338" border="0" style="border: 0px; background-image: none; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; padding-top: 0px;" /></p><p style="margin: 25px 0px 0px; color: #686868; font-family: Tahoma, 'Microsoft YaHei', Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 24px; background-color: #ffffff;"><strong>按 Configure Server 进入设置界面：</strong></p><p style="margin: 25px 0px 0px; color: #686868; font-family: Tahoma, 'Microsoft YaHei', Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 24px; background-color: #ffffff;"><img title="Synergy设置" src="http://img.iplaysoft.com/wp-content/uploads/2011/56c33ebd6aad_D56C/2.png" alt="Synergy设置" width="500" height="388" border="0" style="border: 0px; background-image: none; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; padding-top: 0px;" /></p><p style="margin: 25px 0px 0px; color: #686868; font-family: Tahoma, 'Microsoft YaHei', Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 24px; background-color: #ffffff;">从右上角拖动一台电脑放到方框中 (删除的话是把电脑图标拖放到左上角的垃圾桶)，模拟现实的位置摆放好。例如我的台式机PC是服务器端，<a href="http://www.iplaysoft.com/go/mackbook" target="_blank" style="text-decoration: initial; color: #0086e3;">MacBook</a>&nbsp;是在台式机的左边，按图中那样设置，然后把名字改成客户端电脑的计算机名（Win用户可以在&#8220;我的电脑&#8221;右键属性中看到）。如果多台电脑也是这样依次添加，确定后返回之前的界面，按Start启动服务。<br /><br /><strong style="color: red;">我测试的服务器是windows，控制的电脑是mac, 如果大家不知道MAC电脑名,可以先启动服务器，等客户端连接的时候 菜单view-&gt;Log Output中会有XX电脑连接服务器的日志，将里面的电脑名记录下来就OK了</strong><br /><br /></p><h3>设置客户端：</h3><p style="margin: 25px 0px 0px; color: #686868; font-family: Tahoma, 'Microsoft YaHei', Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 24px; background-color: #ffffff;">客户端的设置比服务器端要简单得多。我们来到 Macbook上，启动&nbsp;<a href="http://www.iplaysoft.com/synergy.html" style="text-decoration: initial; color: #0086e3;">Synergy</a>&nbsp;后，只要选择成客户端模式，并填上服务器的计算机名或者IP地址即可。如下图，设置好后，同样按 Start 即可让其连接服务器。</p><p style="margin: 25px 0px 0px; color: #686868; font-family: Tahoma, 'Microsoft YaHei', Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 24px; background-color: #ffffff;"><img title="Synergy客户端" src="http://img.iplaysoft.com/wp-content/uploads/2011/56c33ebd6aad_D56C/3.png" alt="Synergy客户端" width="461" height="338" border="0" style="border: 0px; background-image: none; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; padding-top: 0px;" /></p><p style="margin: 25px 0px 0px; color: #686868; font-family: Tahoma, 'Microsoft YaHei', Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 24px; background-color: #ffffff;">一般来说，如果连接成功的话，你的鼠标已经可以游走在两台电脑之间了。当然，当的鼠标从PC移动到Macbook之后，我们的键盘也会对Macbook生效，而对PC无效了。我可以在 MacBook 上CTRL+C拷贝一些文字，然后再移动回PC上按键盘CTRL+V粘贴，一切都是那么顺畅自然！非常有意思！<br /><br /><span style="color: red;">我测试客户端电脑是MAC，下载和服务器一致的版本，打开终端，到synergyc的目录</span><br /></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">sudo&nbsp;synergyc&nbsp;</span><span style="color: #000000; ">--</span><span style="color: #000000; ">daemon serverip</span></div><span style="color: red; background-color: #eeeeee;">serverip 表示 上面配置好的服务器IP地址<br /></span><span style="color: red;">--daemon参数 表示可以后台运行</span><br /><br /><p>有遇到的问题可以参考程序目录中的<span style="color: red;">MacReadme.txt</span></p><h3>写在后面：</h3><p style="margin: 25px 0px 0px; color: #686868; font-family: Tahoma, 'Microsoft YaHei', Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 24px; background-color: #ffffff;"><a href="http://www.iplaysoft.com/synergy.html" style="text-decoration: initial; color: #0086e3;">Synergy</a>&nbsp;真的是一款相当相当赞的软件！它能大大提高多电脑用户的<a href="http://www.iplaysoft.com/tag/%E6%95%88%E7%8E%87" target="_blank" style="text-decoration: initial; color: #0086e3;">工作效率</a>，特别是频繁要在不同平台下工作的朋友。更难能可贵的是，这么优秀的一款软件竟然还是免费开源的～不得不对作者肃然起敬啊。其实对于这种软件，即使是要付款的，我也觉得很值得，因为它能真真切切地方便自己。目前唯一美中不足的是，它只能跨机共享剪贴板中的文本信息，不能跨电脑拷贝文件，也不能方便地在两台电脑之间随意拖动来传输文件，不然就真是碉堡了。至于在<a href="http://www.iplaysoft.com/tag/mac" target="_blank" style="text-decoration: initial; color: #0086e3;">Mac</a>和<a href="http://www.iplaysoft.com/tag/linux" target="_blank" style="text-decoration: initial; color: #0086e3;">Linux</a>下的操作、快捷键的设置等更多高级的玩法就等你自己去折腾吧。</p><p style="margin: 25px 0px 0px; color: #686868; font-family: Tahoma, 'Microsoft YaHei', Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 24px; background-color: #ffffff;">原文地址：<a href="http://www.iplaysoft.com/synergy.html">http://www.iplaysoft.com/synergy.html</a><br /><br /></p><img src ="http://www.cppblog.com/wc250en007/aggbug/195194.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wc250en007/" target="_blank">风轻云淡</a> 2012-11-14 15:02 <a href="http://www.cppblog.com/wc250en007/archive/2012/11/14/195194.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>有关Linux的.a、.so和.o文件(转)</title><link>http://www.cppblog.com/wc250en007/archive/2012/11/03/194186.html</link><dc:creator>风轻云淡</dc:creator><author>风轻云淡</author><pubDate>Fri, 02 Nov 2012 23:53:00 GMT</pubDate><guid>http://www.cppblog.com/wc250en007/archive/2012/11/03/194186.html</guid><wfw:comment>http://www.cppblog.com/wc250en007/comments/194186.html</wfw:comment><comments>http://www.cppblog.com/wc250en007/archive/2012/11/03/194186.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wc250en007/comments/commentRss/194186.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wc250en007/services/trackbacks/194186.html</trackback:ping><description><![CDATA[<span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">gcc 生成 .a静态库和 .so动态库&nbsp;</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">我们通常把一些公用函数制作成函数库，供其它程序使用。函数库分为静态库和动态库两</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">种。静态库在程序编译时会被连接到目标代码中，程序运行时将不再需要该静态库。动态</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">库在程序编译时并不会被连接到目标代码中，而是在程序运行是才被载入，因此在程序运</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">行时还需要动态库存在。本文主要通过举例来说明在Linux中如何创建静态库和动态库，以</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">及使用它们。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">在创建函数库前，我们先来准备举例用的源程序，并将函数库的源程序编译成.o文件。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">第1步：编辑得到举例的程序--hello.h、hello.c和main.c；</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">hello.c(见程序2)是函数库的源程序，其中包含公用函数hello，该函数将在屏幕上输出"</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">Hello XXX!"。hello.h(见程序1)为该函数库的头文件。main.c(见程序3)为测试库文件的</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">主程序，在主程序中调用了公用函数hello。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">程序1: hello.h</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">#ifndef HELLO_H</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">#define HELLO_H</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">void hello(const char *name);</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">#endif //HELLO_H</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">程序2: hello.c</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">#include &lt;stdio.h&gt;</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">void hello(const char *name)</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">{</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">printf("Hello %s!\n", name);</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">}</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">程序3: main.c</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">#include "hello.h"</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">int main()</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">{</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">hello("everyone");</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">return 0;</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">}</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">第2步：将hello.c编译成.o文件；</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">无论静态库，还是动态库，都是由.o文件创建的。因此，我们必须将源程序hello.c通过g</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">cc先编译成.o文件。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">在系统提示符下键入以下命令得到hello.o文件。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; "># gcc -c hello.c</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">#</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">我们运行ls命令看看是否生存了hello.o文件。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; "># ls</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">hello.c hello.h hello.o main.c</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">#</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">在ls命令结果中，我们看到了hello.o文件，本步操作完成。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">下面我们先来看看如何创建静态库，以及使用它。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">第3步：由.o文件创建静态库；</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">静态库文件名的命名规范是以lib为前缀，紧接着跟静态库名，扩展名为.a。例如：我们将</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">创建的静态库名为myhello，则静态库文件名就是libmyhello.a。在创建和使用静态库时，</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">需要注意这点。创建静态库用ar命令。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">在系统提示符下键入以下命令将创建静态库文件libmyhello.a。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; "># ar -crv libmyhello.a hello.o</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">#</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">我们同样运行ls命令查看结果：</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; "># ls</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">hello.c hello.h hello.o libmyhello.a main.c</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">#</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">ls命令结果中有libmyhello.a。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">第4步：在程序中使用静态库；</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">静态库制作完了，如何使用它内部的函数呢？只需要在使用到这些公用函数的源程序中包</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">含这些公用函数的原型声明，然后在用gcc命令生成目标文件时指明静态库名，gcc将会从</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">静态库中将公用函数连接到目标文件中。注意，gcc会在静态库名前加上前缀lib，然后追</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">加扩展名.a得到的静态库文件名来查找静态库文件。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">在程序3:main.c中，我们包含了静态库的头文件hello.h，然后在主程序main中直接调用公</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">用函数hello。下面先生成目标程序hello，然后运行hello程序看看结果如何。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">法一 # gcc -o hello main.c -L. &#8211;lmyhello，自定义的库时，main.c还可放在-L.和 &#8211;lmyhello之间，但是不能放在它俩之后，否则会提示myhello没定义，但是是系统的库时，如g++ -o main（-L/usr/lib） -lpthread main.cpp就不出错。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">法二 #gcc main.c libmyhello.a -o hello</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">法三：先生成main.o：gcc -c main.c ，再生成可执行文件：gcc -o hello main.o libmyhello.a，动态库连接时也可以这样做。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; "># ./hello</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">Hello everyone!</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">#</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">我们删除静态库文件试试公用函数hello是否真的连接到目标文件 hello中了。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; "># rm libmyhello.a</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">rm: remove regular file `libmyhello.a'? y</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; "># ./hello</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">Hello everyone!</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">#</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">程序照常运行，静态库中的公用函数已经连接到目标文件中了。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">我们继续看看如何在Linux中创建动态库。我们还是从.o文件开始。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">第5步：由.o文件创建动态库文件；</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">动态库文件名命名规范和静态库文件名命名规范类似，也是在动态库名增加前缀lib，但其</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">文件扩展名为.so。例如：我们将创建的动态库名为myhello，则动态库文件名就是libmyh</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">ello.so。用gcc来创建动态库。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">在系统提示符下键入以下命令得到动态库文件libmyhello.so。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; "># gcc -shared -fPCI -o libmyhello.so hello.o （-o不可少）</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">#</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">我们照样使用ls命令看看动态库文件是否生成。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; "># ls</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">hello.c hello.h hello.o libmyhello.so main.c</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">#</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">第6步：在程序中使用动态库；</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">在程序中使用动态库和使用静态库完全一样，也是在使用到这些公用函数的源程序中包含</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">这些公用函数的原型声明，然后在用gcc命令生成目标文件时指明动态库名进行编译。我们</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">先运行gcc命令生成目标文件，再运行它看看结果。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; "># gcc -o hello main.c -L. -lmyhello</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">(或 #gcc main.c libmyhello.so -o hello 不会出错（没有libmyhello.so的话，会出错），但是接下来./hello 会提示出错，因为虽然连接时用的是当前目录的动态库，但是运行时，是到/usr/lib中找库文件的，将文件libmyhello.so复制到目录/usr/lib中就OK了)</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; "># ./hello</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">./hello: error while loading shared libraries: libmyhello.so: cannot open shar</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">ed object file: No such file or directory</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">#</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">哦！出错了。快看看错误提示，原来是找不到动态库文件libmyhello.so。程序在运行时，</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">会在/usr/lib和/lib等目录中查找需要的动态库文件。若找到，则载入动态库，否则将提</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">示类似上述错误而终止程序运行。我们将文件libmyhello.so复制到目录/usr/lib中，再试</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">试。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; "># mv libmyhello.so /usr/lib</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; "># ./hello</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">Hello everyone!</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">#</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">成功了。这也进一步说明了动态库在程序运行时是需要的。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">我们回过头看看，发现使用静态库和使用动态库编译成目标程序使用的gcc命令完全一样，</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">那当静态库和动态库同名时，gcc命令会使用哪个库文件呢？抱着对问题必究到底的心情，</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">来试试看。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">先删除除.c和.h外的所有文件，恢复成我们刚刚编辑完举例程序状态。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; "># rm -f hello hello.o /usr/lib/libmyhello.so</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; "># ls</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">hello.c hello.h main.c</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">#</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">在来创建静态库文件libmyhello.a和动态库文件libmyhello.so。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; "># gcc -c hello.c</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; "># ar -cr libmyhello.a hello.o （或-cvr ）</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; "># gcc -shared -fPCI -o libmyhello.so hello.o</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; "># ls</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">hello.c hello.h hello.o libmyhello.a libmyhello.so main.c</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">#</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">通过上述最后一条ls命令，可以发现静态库文件libmyhello.a和动态库文件libmyhello.s</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">o都已经生成，并都在当前目录中。然后，我们运行gcc命令来使用函数库myhello生成目标</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">文件hello，并运行程序 hello。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; "># gcc -o hello main.c -L. &#8211;lmyhello （动态库和静态库同时存在时，优先使用动态库， 当然，直接#gcc main.c libmyhello.a -o hello的话，就是指定为静态库了）</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; "># ./hello</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">./hello: error while loading shared libraries: libmyhello.so: cannot open shar</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">ed object file: No such file or directory</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">#</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">从程序hello运行的结果中很容易知道，当静态库和动态库同名时，gcc命令将优先使用动态库，默认去连/usr/lib和/lib等目录中的动态库，将文件libmyhello.so复制到目录/usr/lib中即可。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">Note:</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">编译参数解析</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">最主要的是GCC命令行的一个选项:</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">-shared 该选项指定生成动态连接库（让连接器生成T类型的导出符号表，有时候也生成弱连接W类型的导出符号），不用该标志外部程序无法连接。相当于一个可执行文件</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">-fPIC 表示编译为位置独立的代码，不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要，而不能达到真正代码段共享的目的。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">-L. 表示要连接的库在当前目录中；（多个库：在编译命令行中，将使用的静态库文件放在源文件后面就可以了。比如：gcc -L/usr/lib myprop.c libtest.a libX11.a libpthread.a -o myprop</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">其中-L/usr/lib指定库文件的查找路径。编译器默认在当前目录下先查找指定的库文件，如前面的&#8220;法二 #gccmain.c libmyhello.a-o hello&#8221;）</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">-lmyhello 编译器查找动态连接库时有隐含的命名规则，即在给出的名字前面加上lib，后面加上.so或.a来确定库的名称libmyhello.so或libmyhello.a。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">LD_LIBRARY_PATH这个环境变量指示动态连接器可以装载动态库的路径。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">当然如果有root权限的话，可以修改/etc/ld.so.conf文件，然后调用 /sbin/ldconfig来达到同样的目的，不过如果没有root权限，那么只能采用输出LD_LIBRARY_PATH的方法了。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">调用动态库的时候有几个问题会经常碰到，有时，明明已经将库的头文件所在目录 通过 &#8220;-I&#8221; include进来了，库所在文件通过 &#8220;-L&#8221;参数引导，并指定了&#8220;-l&#8221;的库名，但通过ldd命令察看时，就是死活找不到你指定链接的so文件，这时你要作的就是通过修改 LD_LIBRARY_PATH或者/etc/ld.so.conf文件来指定动态库的目录。通常这样做就可以解决库无法链接的问题了。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">另：</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">从上述可知，如何找到生成的动态库有3种方式：</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">(1)把库拷贝到/usr/lib和/lib目录下。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">(2)在LD_LIBRARY_PATH环境变量中加上库所在路径。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">例如动态库libhello.so在/home/example/lib目录下：</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">$export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/example/lib</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">(3) 修改/etc/ld.so.conf文件，把库所在的路径加到文件末尾，并执行ldconfig刷新。这样，加入的目录下的所有库文件都可见。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">附：像下面这样指定路径去连接系统的静态库，会报错说要连接的库找不到:</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">g++ -o main main.cpp -L/usr/lib libpthread.a&nbsp;</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">必须这样g++ -o main main.cpp -L/usr/lib -lpthread才正确 。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">自定义的库考到/usr/lib 下时，</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">g++ -o main main.cpp -L/usr/lib libpthread.a libthread.a libclass.a会出错，但是这样g++ -o main main.cpp -L/usr/lib -lpthread -lthread -lclass就正确了。</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">转自：http://hi.baidu.com/������/blog/item/e58ed2f142913ea7a50f525e.html</span><br style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; " /><span style="color: #454545; font-family: tahoma, Helvetica, arial; background-color: #ffffff; ">来自: http://hi.baidu.com/jiyeqian/blog/item/d6886e22c93f5ef8d6cae27c.html</span><img src ="http://www.cppblog.com/wc250en007/aggbug/194186.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wc250en007/" target="_blank">风轻云淡</a> 2012-11-03 07:53 <a href="http://www.cppblog.com/wc250en007/archive/2012/11/03/194186.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>win7+eclipse+CDT+cygwin symbol could not be resolved</title><link>http://www.cppblog.com/wc250en007/archive/2012/10/24/193763.html</link><dc:creator>风轻云淡</dc:creator><author>风轻云淡</author><pubDate>Wed, 24 Oct 2012 02:56:00 GMT</pubDate><guid>http://www.cppblog.com/wc250en007/archive/2012/10/24/193763.html</guid><wfw:comment>http://www.cppblog.com/wc250en007/comments/193763.html</wfw:comment><comments>http://www.cppblog.com/wc250en007/archive/2012/10/24/193763.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/wc250en007/comments/commentRss/193763.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wc250en007/services/trackbacks/193763.html</trackback:ping><description><![CDATA[参考地址：在Win7系统下搭建Eclipse+Cygwin开发环境&nbsp;<a href="http://www.cnblogs.com/williamwue/archive/2011/06/30/2094979.html">http://www.cnblogs.com/williamwue/archive/2011/06/30/2094979.html<br /><br /></a>问题：用eclipse 建立编译C++工程出现错误提示&nbsp;symbol could not be resolved<br /><br />解决办法：<br /><br />1.<span style="color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; background-color: #ffffff; ">window -&gt; preferences -&gt; C/C++ -&gt; debug -&gt; source lookup path &gt; Path Mapping<br />Name:whatever &nbsp;CompilationPath: \cygdirve\c &nbsp; &nbsp; &nbsp;Local file system path:C:\<br /><br />用cygwin下的c盘来替代当前的C盘 来查找需要的库文件<br /><br /><br />2.</span><span style="color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; background-color: #ffffff; ">indexer: &nbsp;index source and header files opened &nbsp;in editor</span><br style="color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; background-color: #ffffff; " /><span style="color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; background-color: #ffffff; ">window -&gt; preferences -&gt; C/C++ -&gt; indexer<br /><br />OK编译的错误解决了<br />运行时又出现了如下的BUG：<br /><img src="http://www.cppblog.com/images/cppblog_com/wc250en007/save.jpg" width="1149" height="563" alt="" /><br /><br />找不到对应的文件，无法进行调试，GOOGLE了半天才找到解决的方法：<br /></span><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->If&nbsp;you're&nbsp;working&nbsp;under&nbsp;Windows,&nbsp;have&nbsp;you&nbsp;set&nbsp;the&nbsp;required&nbsp;mappings?<br />Maybe&nbsp;Eclipse&nbsp;couldn't&nbsp;find&nbsp;the&nbsp;Source&nbsp;because&nbsp;of&nbsp;the&nbsp;missing&nbsp;mapping&nbsp;to<br />the&nbsp;(cygwin-)drive&nbsp;where&nbsp;your&nbsp;projects/workspaces&nbsp;are.<br /><br />When&nbsp;you&nbsp;start&nbsp;Cygwin,&nbsp;enter&nbsp;"mount"&nbsp;and&nbsp;look&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;the&nbsp;mapping&nbsp;you&nbsp;have:<br />They&nbsp;may&nbsp;look&nbsp;like&nbsp;<span style="color: #0000FF; ">this</span>:<br /><br /><br />Admin@bs11-01xp&nbsp;~<br />$&nbsp;mount<br />D:\cygwin\bin&nbsp;on&nbsp;/usr/bin&nbsp;type&nbsp;system&nbsp;(binmode)<br />D:\cygwin\lib&nbsp;on&nbsp;/usr/lib&nbsp;type&nbsp;system&nbsp;(binmode)<br />D:\cygwin&nbsp;on&nbsp;/&nbsp;type&nbsp;system&nbsp;(binmode)<br />c:&nbsp;on&nbsp;/cygdrive/c&nbsp;type&nbsp;system&nbsp;(binmode,noumount)<br />d:&nbsp;on&nbsp;/cygdrive/d&nbsp;type&nbsp;system&nbsp;(binmode,noumount)<br />e:&nbsp;on&nbsp;/cygdrive/e&nbsp;type&nbsp;system&nbsp;(binmode,noumount)<br />j:&nbsp;on&nbsp;/cygdrive/j&nbsp;type&nbsp;system&nbsp;(binmode,noumount)<br />n:&nbsp;on&nbsp;/cygdrive/n&nbsp;type&nbsp;system&nbsp;(binmode,noumount)<br />u:&nbsp;on&nbsp;/cygdrive/u&nbsp;type&nbsp;system&nbsp;(binmode,noumount)<br />w:&nbsp;on&nbsp;/cygdrive/w&nbsp;type&nbsp;system&nbsp;(binmode,noumount)<br />x:&nbsp;on&nbsp;/cygdrive/x&nbsp;type&nbsp;system&nbsp;(binmode,noumount)<br />y:&nbsp;on&nbsp;/cygdrive/y&nbsp;type&nbsp;system&nbsp;(binmode,noumount)<br />z:&nbsp;on&nbsp;/cygdrive/z&nbsp;type&nbsp;system&nbsp;(binmode,noumount)<br /><br /><br /><br />My&nbsp;Projects&nbsp;ara&nbsp;all&nbsp;under&nbsp;J:\Projects,&nbsp;so&nbsp;my&nbsp;mapping&nbsp;needs&nbsp;to&nbsp;be&nbsp;present<br /><span style="color: #0000FF; ">in</span>&nbsp;Eclipse&nbsp;<span style="color: #0000FF; ">as</span>:<br />/cygdrive/j&nbsp;j:/<br /><br /><br />Open&nbsp;Eclipse&nbsp;and&nbsp;then&nbsp;click<br />-&nbsp;Windows&nbsp;=&gt;&nbsp;Preferences<img src="http://www.cppblog.com/Images/dot.gif"  alt="" />&nbsp;=&gt;&nbsp;C/C++&nbsp;=&gt;&nbsp;Debug&nbsp;=&gt;Common&nbsp;Source&nbsp;Lookup<br />Path<br />-&nbsp;Add&nbsp;a&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Path&nbsp;Mapping:&nbsp;click&nbsp;[Add]&nbsp;=&gt;&nbsp;Path&nbsp;Mapping&nbsp;=&gt;&nbsp;[OK]<br />-&nbsp;Select&nbsp;the&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Mapping&nbsp;=&gt;&nbsp;[Edith]&nbsp;=&gt;&nbsp;change&nbsp;Name&nbsp;of&nbsp;Mapping&nbsp;"Project<br />Source"&nbsp;=&gt;&nbsp;[Add]<br />-&nbsp;<span style="color: #0000FF; ">set</span>&nbsp;"Compilation&nbsp;path"&nbsp;to&nbsp;the&nbsp;Source&nbsp;(Sample&nbsp;cygwin!)&nbsp;"/cygdrive/j"<br />(without&nbsp;the&nbsp;quotes!)<br />-&nbsp;<span style="color: #0000FF; ">set</span>"Local&nbsp;file&nbsp;system&nbsp;path"&nbsp;tho&nbsp;"J:\"&nbsp;(without&nbsp;the&nbsp;quotes!)</div><span style="color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; background-color: #ffffff; ">上面配置对应了/cygdrive/c &nbsp;C:\<br />但是我在windows下的工程目录都是在G盘，同样添加一个G盘的对应目录就OK了<br /><br /><br /><br /></span><img src ="http://www.cppblog.com/wc250en007/aggbug/193763.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wc250en007/" target="_blank">风轻云淡</a> 2012-10-24 10:56 <a href="http://www.cppblog.com/wc250en007/archive/2012/10/24/193763.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在linux系统下用eclipse集成环境开发cocos2d-x android项目，集成java和c++环境(转)</title><link>http://www.cppblog.com/wc250en007/archive/2012/10/24/193757.html</link><dc:creator>风轻云淡</dc:creator><author>风轻云淡</author><pubDate>Wed, 24 Oct 2012 01:29:00 GMT</pubDate><guid>http://www.cppblog.com/wc250en007/archive/2012/10/24/193757.html</guid><wfw:comment>http://www.cppblog.com/wc250en007/comments/193757.html</wfw:comment><comments>http://www.cppblog.com/wc250en007/archive/2012/10/24/193757.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wc250en007/comments/commentRss/193757.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wc250en007/services/trackbacks/193757.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 原文地址：子龙山人教程&nbsp;http://www.cnblogs.com/zilongshanren/archive/2012/04/28/2473282.html原文链接地址：http://www.raywenderlich.com/11283/cocos2d-x-for-ios-and-android-getting-started教程截图：&nbsp; &nbsp; Cocos2D是一...&nbsp;&nbsp;<a href='http://www.cppblog.com/wc250en007/archive/2012/10/24/193757.html'>阅读全文</a><img src ="http://www.cppblog.com/wc250en007/aggbug/193757.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wc250en007/" target="_blank">风轻云淡</a> 2012-10-24 09:29 <a href="http://www.cppblog.com/wc250en007/archive/2012/10/24/193757.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 下载安装Cygwin(转)</title><link>http://www.cppblog.com/wc250en007/archive/2012/10/23/193708.html</link><dc:creator>风轻云淡</dc:creator><author>风轻云淡</author><pubDate>Tue, 23 Oct 2012 01:54:00 GMT</pubDate><guid>http://www.cppblog.com/wc250en007/archive/2012/10/23/193708.html</guid><wfw:comment>http://www.cppblog.com/wc250en007/comments/193708.html</wfw:comment><comments>http://www.cppblog.com/wc250en007/archive/2012/10/23/193708.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wc250en007/comments/commentRss/193708.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wc250en007/services/trackbacks/193708.html</trackback:ping><description><![CDATA[原文地址：<a href="http://www.programarts.com/cfree_ch/doc/help/UsingCF/CompilerSupport/Cygwin/Cygwin1.htm">http://www.programarts.com/cfree_ch/doc/help/UsingCF/CompilerSupport/Cygwin/Cygwin1.htm</a><br /><br />我们可以到Cygwin的官方网站下载Cygwin的安装程序，地址是：<p style="font-family: Simsun; font-size: medium; line-height: normal; ">&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.cygwin.com/">http://www.cygwin.com/</a></p><p style="font-family: Simsun; font-size: medium; line-height: normal; ">或者直接使用下载连接来下载安装程序，下载连接是：</p><p style="font-family: Simsun; font-size: medium; line-height: normal; ">&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.cygwin.com/setup.exe">http://www.cygwin.com/setup.exe</a></p><p style="font-family: Simsun; font-size: medium; line-height: normal; ">下载完成后，运行setup.exe程序，出现安装画面。直接点&#8220;下一步&#8221;，出现安装模式的对话框，如下图所示：</p><p style="font-family: Simsun; font-size: medium; line-height: normal; "><img border="0" src="http://www.programarts.com/cfree_ch/doc/help/UsingCF/CompilerSupport/Cygwin/Cygwin1.PNG" width="505" height="389"  alt="" /></p><p style="font-family: Simsun; font-size: medium; line-height: normal; ">我们看到有三种安装模式：</p><ul style="font-family: Simsun; font-size: medium; line-height: normal; "><li>Install from Internet，这种模式直接从Internet安装，适合网速较快的情况；</li><li>Download Without Installing，这种模式只从网上下载Cygwin的组件包，但不安装；</li><li>Install from Local Directory，这种模式与上面第二种模式对应，当你的Cygwin组件包已经下载到本地，则可以使用此模式从本地安装Cygwin。</li></ul><p style="font-family: Simsun; font-size: medium; line-height: normal; ">从上述三种模式中选择适合你的安装模式，这里我们选择第一种安装模式，直接从网上安装，当然在下载的同时，Cygwin组件也保存到了本地，以便以后能够再次安装。选中后，点击&#8220;下一步&#8221;，</p><p style="font-family: Simsun; font-size: medium; line-height: normal; "><img border="0" src="http://www.programarts.com/cfree_ch/doc/help/UsingCF/CompilerSupport/Cygwin/Cygwin2.PNG" width="505" height="389"  alt="" /></p><p style="font-family: Simsun; font-size: medium; line-height: normal; ">这一步选择Cygwin的安装目录，以及一些参数的设置。默认的安装位置是C:\cygwin\，你也可以选择自己的安装目录，然后选择&#8220;下一步&#8221;，</p><p style="font-family: Simsun; font-size: medium; line-height: normal; "><img border="0" src="http://www.programarts.com/cfree_ch/doc/help/UsingCF/CompilerSupport/Cygwin/Cygwin3.PNG" width="505" height="389"  alt="" /></p><p style="font-family: Simsun; font-size: medium; line-height: normal; ">这一步我们可以选择安装过程中从网上下载的Cygwin组件包的保存位置，选择完以后，点击&#8220;下一步&#8221;，</p><p style="font-family: Simsun; font-size: medium; line-height: normal; "><img border="0" src="http://www.programarts.com/cfree_ch/doc/help/UsingCF/CompilerSupport/Cygwin/Cygwin4.PNG" width="505" height="389"  alt="" /></p><p style="font-family: Simsun; font-size: medium; line-height: normal; ">这一步选择连接的方式，选择你的连接方式，然后点击下一步，会出现选择下载站点的对话框，如下图所示，</p><p style="font-family: Simsun; font-size: medium; line-height: normal; "><img border="0" src="http://www.programarts.com/cfree_ch/doc/help/UsingCF/CompilerSupport/Cygwin/Cygwin5.PNG" width="505" height="389"  alt="" /></p><p style="font-family: Simsun; font-size: medium; line-height: normal; ">在这一步，需要注意，为了获得最快的下载速度，我们首先在列表中寻找Cygwin中国镜像的地址：http://www.cygwin.cn，如果找到就选中这个地址；如果找不到这个地址，就在下面手动输入中国镜像的地址：http://www.cygwin.cn/pub/，再点击&#8220;Add&#8221;，然后再在列表中选中。选择完成后，点击&#8220;下一步&#8221;，</p><p style="font-family: Simsun; font-size: medium; line-height: normal; "><img border="0" src="http://www.programarts.com/cfree_ch/doc/help/UsingCF/CompilerSupport/Cygwin/Cygwin6.PNG" width="505" height="389"  alt="" /></p><p style="font-family: Simsun; font-size: medium; line-height: normal; ">这一步，我们选择需要下载安装的组件包，为了使我们安装的Cygwin能够编译程序，我们需要安装gcc编译器，默认情况下，gcc并不会被安装，我们需要选中它来安装。为了安装gcc，我们用鼠标点开组件列表中的&#8220;Devel&#8221;分支，在该分支下，有很多组件，我们必须的是：</p><p style="font-family: Simsun; font-size: medium; line-height: normal; "><strong>binutils&nbsp;<br />gcc&nbsp;<br />gcc-mingw&nbsp;<br />gdb</strong></p><p style="font-family: Simsun; font-size: medium; line-height: normal; ">鼠标点击组件前面的循环按钮，会出现组建的版本日期，我们选择最新的版本安装，下图是选中后的四类组件的截图：</p><table border="0" width="100%" style="font-family: Simsun; "><tbody><tr><td><img border="0" src="http://www.programarts.com/cfree_ch/doc/help/UsingCF/CompilerSupport/Cygwin/Cygwin7.PNG" width="456" height="195"  alt="" /><br />binutils组件</td><td><img border="0" src="http://www.programarts.com/cfree_ch/doc/help/UsingCF/CompilerSupport/Cygwin/Cygwin8.PNG" width="456" height="195"  alt="" /><br />gcc组件</td></tr><tr><td><img border="0" src="http://www.programarts.com/cfree_ch/doc/help/UsingCF/CompilerSupport/Cygwin/Cygwin9.PNG" width="456" height="195"  alt="" /><br />gcc-mingw组件</td><td><img border="0" src="http://www.programarts.com/cfree_ch/doc/help/UsingCF/CompilerSupport/Cygwin/Cygwin10.PNG" width="456" height="195"  alt="" /><br />gdb组件</td></tr></tbody></table><p style="font-family: Simsun; font-size: medium; line-height: normal; ">选完以后，我们选择下一步，进入安装过程，如下图所示，</p><p style="font-family: Simsun; font-size: medium; line-height: normal; "><img border="0" src="http://www.programarts.com/cfree_ch/doc/help/UsingCF/CompilerSupport/Cygwin/Cygwin11.PNG" width="505" height="389"  alt="" /></p><p style="font-family: Simsun; font-size: medium; line-height: normal; ">安装的时间依据你选择的组件以及网络情况而定。安装完成后，安装程序会提示是否在桌面上创建Cygwin图标等，点击完成退出安装程序。</p><p style="font-family: Simsun; font-size: medium; line-height: normal; "><img border="0" src="http://www.programarts.com/cfree_ch/doc/help/UsingCF/CompilerSupport/Cygwin/Cygwin12.PNG" width="505" height="389"  alt="" /></p><img src ="http://www.cppblog.com/wc250en007/aggbug/193708.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wc250en007/" target="_blank">风轻云淡</a> 2012-10-23 09:54 <a href="http://www.cppblog.com/wc250en007/archive/2012/10/23/193708.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cocos2d-x android游戏使用自己的字体</title><link>http://www.cppblog.com/wc250en007/archive/2012/10/15/193320.html</link><dc:creator>风轻云淡</dc:creator><author>风轻云淡</author><pubDate>Mon, 15 Oct 2012 08:58:00 GMT</pubDate><guid>http://www.cppblog.com/wc250en007/archive/2012/10/15/193320.html</guid><wfw:comment>http://www.cppblog.com/wc250en007/comments/193320.html</wfw:comment><comments>http://www.cppblog.com/wc250en007/archive/2012/10/15/193320.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/wc250en007/comments/commentRss/193320.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wc250en007/services/trackbacks/193320.html</trackback:ping><description><![CDATA[在使用cocos2d-x发布Android平台游戏时，游戏中可能需要显示中文字体， 或者想显示漂亮的自定义字体,这怎么办呢？<br />cocos2d-x中字体标签提供了CCLabelAtlas, CCLabelBMFont CCLabelTTF<br /><br />1.CCLabelAtlas速度快，支持简单有限的几个字符或数字集合<br /><br />2.CCLabelBMFont&nbsp;<br />我们可以用CCLabelBMFont来加载字体编辑器生成的.plist文件，但是当显示的文字很多时，这种做法就有点费时费力了<br />如：我们想显示游戏中剧情介绍<br /><br />3.CCLabelTTF<br />支持选择一种字体来显示文字，但是只支持系统中默认字体<br /><div style="padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; width: 1307.3519287109375px; word-break: break-all; ">CCLabelTTF*&nbsp;pLabel&nbsp;=&nbsp;CCLabelTTF::create("Hello&nbsp;World",&nbsp;"Arial",&nbsp;24);</div><div></div><br /><strong>问题：我们在Android游戏中想显示游戏剧情，想用自己指定的一种字体gril.ttf(非系统默认字体),怎么办</strong><br /><br />其实cocos2d-x已经提供了帮我们实现了<br />构造CCLabelTTF中指定的字体名传给了<span style="font-size: 13.333333969116211px; background-color: #eeeeee; ">CCTexture2D&nbsp;</span><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">void</span>&nbsp;CCLabelTTF::updateTexture()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;CCTexture2D&nbsp;*tex;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(m_tDimensions.width&nbsp;==&nbsp;0&nbsp;||&nbsp;m_tDimensions.height&nbsp;==&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tex&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;CCTexture2D();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tex-&gt;initWithString(m_string.c_str(),&nbsp;<strong>m_pFontName</strong>-&gt;c_str(),&nbsp;m_fFontSize&nbsp;*&nbsp;CC_CONTENT_SCALE_FACTOR())&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tex&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;CCTexture2D();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tex-&gt;initWithString(m_string.c_str(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CC_SIZE_POINTS_TO_PIXELS(m_tDimensions),&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_hAlignment,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_vAlignment,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_pFontName-&gt;c_str(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_fFontSize&nbsp;*&nbsp;CC_CONTENT_SCALE_FACTOR());<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;<img src="http://www.cppblog.com/Images/dot.gif" alt="" />.<br />}</div>CCTexture2D又将字体名传给了CCImage<br />(PS:这里调用的是android平台下的CCImage类(./platform/android/CCImage.h)<br />而不是win32平台下的CCImage类(./platform/win32/CCImage.h) )<br /><br />android平台下的CCImage<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">bool</span>&nbsp;CCImage::initWithString(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;pText,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nWidth<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;=&nbsp;0</span><span style="color: #008000; ">*/</span>,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nHeight<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;=&nbsp;0</span><span style="color: #008000; ">*/</span>,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ETextAlign&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eAlignMask<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;=&nbsp;kAlignCenter</span><span style="color: #008000; ">*/</span>,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;pFontName<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;=&nbsp;nil</span><span style="color: #008000; ">*/</span>,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nSize<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;=&nbsp;0</span><span style="color: #008000; ">*/</span>)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;bRet&nbsp;=&nbsp;<span style="color: #0000FF; ">false</span>;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">do</span>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CC_BREAK_IF(!&nbsp;pText);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>BitmapDC&nbsp;</strong>&amp;dc&nbsp;=&nbsp;sharedBitmapDC();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CC_BREAK_IF(!&nbsp;dc.getBitmapFromJava(pText,&nbsp;nWidth,&nbsp;nHeight,&nbsp;eAlignMask,&nbsp;<strong>pFontName</strong>,&nbsp;nSize));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;assign&nbsp;the&nbsp;dc.m_pData&nbsp;to&nbsp;m_pData&nbsp;in&nbsp;order&nbsp;to&nbsp;save&nbsp;time</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_pData&nbsp;=&nbsp;dc.m_pData;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CC_BREAK_IF(!&nbsp;m_pData);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_nWidth&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;(<span style="color: #0000FF; ">short</span>)dc.m_nWidth;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_nHeight&nbsp;&nbsp;&nbsp;=&nbsp;(<span style="color: #0000FF; ">short</span>)dc.m_nHeight;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_bHasAlpha&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_bPreMulti&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_nBitsPerComponent&nbsp;=&nbsp;8;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bRet&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(0);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;bRet;<br />}</div><br />然后调用了android平台下的BitmapDC<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&nbsp; &nbsp;&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;getBitmapFromJava(<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*text,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;nWidth,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;nHeight,&nbsp;CCImage::ETextAlign&nbsp;eAlignMask,&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;*&nbsp;pFontName,&nbsp;<span style="color: #0000FF; ">float</span>&nbsp;fontSize)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JniMethodInfo&nbsp;methodInfo;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!&nbsp;JniHelper::getStaticMethodInfo(methodInfo,&nbsp;"<strong>org/cocos2dx/lib/Cocos2dxBitmap</strong>",&nbsp;"<strong>createTextBitmap</strong>",&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"(Ljava/lang/String;Ljava/lang/String;IIII)V"))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CCLOG("%s&nbsp;%d:&nbsp;error&nbsp;to&nbsp;get&nbsp;methodInfo",&nbsp;__FILE__,&nbsp;__LINE__);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/Images/dot.gif" alt="" /><img src="http://www.cppblog.com/Images/dot.gif" alt="" /><br />}</div><br />这里显示了调用JAVA代码<strong style="font-size: 13.333333969116211px; ">Cocos2dxBitmap.java</strong>下的<strong style="font-size: 13.333333969116211px; ">createTextBitmap</strong>函数<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&nbsp; &nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@width:&nbsp;the&nbsp;width&nbsp;to&nbsp;draw,&nbsp;it&nbsp;can&nbsp;be&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@height:&nbsp;the&nbsp;height&nbsp;to&nbsp;draw,&nbsp;it&nbsp;can&nbsp;be&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;createTextBitmap(String&nbsp;content,&nbsp;String&nbsp;fontName,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;fontSize,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;alignment,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;width,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;height){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;content&nbsp;=&nbsp;refactorString(content);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Paint&nbsp;paint&nbsp;=&nbsp;<strong>newPaint</strong>(<strong>fontName</strong>,&nbsp;fontSize,&nbsp;alignment);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TextProperty&nbsp;textProperty&nbsp;=&nbsp;computeTextProperty(content,&nbsp;paint,&nbsp;width,&nbsp;height);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;bitmapTotalHeight&nbsp;=&nbsp;(height&nbsp;==&nbsp;0&nbsp;?&nbsp;textProperty.totalHeight:height);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Draw&nbsp;text&nbsp;to&nbsp;bitmap</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bitmap&nbsp;bitmap&nbsp;=&nbsp;Bitmap.createBitmap(textProperty.maxWidth,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bitmapTotalHeight,&nbsp;Bitmap.Config.ARGB_8888);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Canvas&nbsp;canvas&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Canvas(bitmap);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Draw&nbsp;string</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FontMetricsInt&nbsp;fm&nbsp;=&nbsp;paint.getFontMetricsInt();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;x&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;y&nbsp;=&nbsp;computeY(fm,&nbsp;height,&nbsp;textProperty.totalHeight,&nbsp;alignment);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;lines&nbsp;=&nbsp;textProperty.lines;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(String&nbsp;line&nbsp;:&nbsp;lines){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;=&nbsp;computeX(paint,&nbsp;line,&nbsp;textProperty.maxWidth,&nbsp;alignment);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;canvas.drawText(line,&nbsp;x,&nbsp;y,&nbsp;paint);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y&nbsp;+=&nbsp;textProperty.heightPerLine;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initNativeObject(bitmap);<br />&nbsp;&nbsp;&nbsp;&nbsp;}</div><br />在<strong style="font-size: 13.333333969116211px; ">newPaint</strong>函数中调用了字体加载<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;Paint&nbsp;newPaint(String&nbsp;fontName,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;fontSize,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;alignment){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Paint&nbsp;paint&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Paint();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;paint.setColor(Color.WHITE);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;paint.setTextSize(fontSize);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;paint.setAntiAlias(<span style="color: #0000FF; ">true</span>);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Set&nbsp;type&nbsp;face&nbsp;for&nbsp;paint,&nbsp;now&nbsp;it&nbsp;support&nbsp;.ttf&nbsp;file.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(fontName.endsWith(<span style="color: red; ">".ttf"</span>)){ &nbsp; &nbsp; <span style="color: red; ">&nbsp;//</span><span style="font-size: 14.44444465637207px; color: red; ">字体需要.ttf结束</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">Typeface&nbsp;typeFace&nbsp;=&nbsp;Typeface.createFromAsset(context.getAssets(),&nbsp;fontName);</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>Typeface&nbsp;typeFace&nbsp;=&nbsp;Cocos2dxTypefaces.<span style="color: #0000FF; ">get</span>(context,&nbsp;fontName);</strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>paint.setTypeface(typeFace);</strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(Exception&nbsp;e){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.e("Cocos2dxBitmap",&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"error&nbsp;to&nbsp;create&nbsp;ttf&nbsp;type&nbsp;face:&nbsp;"&nbsp;+&nbsp;fontName);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;The&nbsp;file&nbsp;may&nbsp;not&nbsp;find,&nbsp;use&nbsp;system&nbsp;font<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;paint.setTypeface(Typeface.create(fontName,&nbsp;Typeface.NORMAL));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;paint.setTypeface(Typeface.create(fontName,&nbsp;Typeface.NORMAL));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; .......<br />&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;paint;<br />&nbsp;&nbsp;&nbsp;&nbsp;}</div><div>（PS:Typeface类定义字体和字体内在的类型。这个类被用在画笔Paint设置的时候，比如用textSize,textSkewX和textScale设置来指定text在画的时候如何来显示和测量。</div>android中用Typeface来指定字体）<br /><br />另一点需要注意的是：字体需要.ttf结束<br /><br /><strong>使用方法</strong>：<br />1.在proj.android\assets文件夹中添加<span style="color: red; ">girl.ttf</span><br />2.程序中调用对应的字体就可以了<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&nbsp; &nbsp; CCSize&nbsp;size&nbsp;=&nbsp;CCDirector::sharedDirector()-&gt;getWinSize();<br />&nbsp;&nbsp;&nbsp;&nbsp;CCLabelTTF*&nbsp;label&nbsp;=&nbsp;CCLabelTTF::create("少女HelloWorld",&nbsp;"<span style="color: red; ">girl.ttf</span>",&nbsp;24);<br />&nbsp;&nbsp;&nbsp;&nbsp;label-&gt;setPosition(ccp(size.width/2,&nbsp;size.height/2));<br />&nbsp;&nbsp;&nbsp;&nbsp;addChild(label);</div>3.如果你需要显示汉字，则需要将包含有字符串的文件(如.cpp)转换为UTF-8格式编码，否则会显示乱码<br /><br />IOS和win32平台没有测试，相信的差不多<br /><br />附上测试图片：<br /><img src="http://www.cppblog.com/images/cppblog_com/wc250en007/cocos2d-x/Screenshot_2012-10-15-16-55-33.png" alt="" /><br /><br /><br /><br />哈哈 可以在游戏中打包自己想要的字体啦<br /><br /><br /><br /><br /><br /><br /><img src ="http://www.cppblog.com/wc250en007/aggbug/193320.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wc250en007/" target="_blank">风轻云淡</a> 2012-10-15 16:58 <a href="http://www.cppblog.com/wc250en007/archive/2012/10/15/193320.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VC 生成后事件 Post-Build Event</title><link>http://www.cppblog.com/wc250en007/archive/2012/09/07/189795.html</link><dc:creator>风轻云淡</dc:creator><author>风轻云淡</author><pubDate>Fri, 07 Sep 2012 04:15:00 GMT</pubDate><guid>http://www.cppblog.com/wc250en007/archive/2012/09/07/189795.html</guid><wfw:comment>http://www.cppblog.com/wc250en007/comments/189795.html</wfw:comment><comments>http://www.cppblog.com/wc250en007/archive/2012/09/07/189795.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/wc250en007/comments/commentRss/189795.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wc250en007/services/trackbacks/189795.html</trackback:ping><description><![CDATA[生成工程的时候可能生成目录不是我们需要的目录，难免需要拷贝一份到我们需要的目录下了<br /><br />visual studio-&gt;右键工程-&gt;properties-&gt;Build Events-&gt;Post-Build Event-&gt;Command Line下<br /><div style="padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; width: 1030.242431640625px; word-break: break-all; ">xcopy&nbsp;$(OutDir)$(TargetFileName)&nbsp;$(ProjectDir)..\Resources<span style="color: red; ">\</span>&nbsp;/Y</div><br />这个命令式功能是将生成目录下的exe文件拷贝到工程目录上一级目录下的Resources文件夹下<br /><br />注意点：<br /><br />1.$(OutDir)等宏路径中已经附带了'\'<br />2.生成后事件xcopy其实就是运行一个控制台命令，所以<strong>命令不支持&#8216;/'</strong><br />像之前写的一个错误命令<br /><div style="padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; width: 1030.242431640625px; word-break: break-all; ">xcopy&nbsp;$(OutDir)$(TargetFileName)&nbsp;$(ProjectDir)..<span style="color: red; ">/</span>Resources\&nbsp;/Y</div>运行会提示错误<br /><br />3.&#8220;/Y"是参数，表示有相同文件存在则替换<br /><br />当然也可以拷贝整个文件夹<br /><div style="padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; width: 1030.242431640625px; word-break: break-all; ">xcopy&nbsp;"$(ProjectDir)controls"&nbsp;"$(TargetDir)..\app1\controls"&nbsp;/y&nbsp;/i&nbsp;/e&nbsp;/exclude:CodeFilesToExclude.txt</div><br />具体参数就要参考到CMD控制台下查看xcopy的具体功能了...<img src ="http://www.cppblog.com/wc250en007/aggbug/189795.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wc250en007/" target="_blank">风轻云淡</a> 2012-09-07 12:15 <a href="http://www.cppblog.com/wc250en007/archive/2012/09/07/189795.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++学习笔记05 由类名创建对象</title><link>http://www.cppblog.com/wc250en007/archive/2012/08/30/188728.html</link><dc:creator>风轻云淡</dc:creator><author>风轻云淡</author><pubDate>Thu, 30 Aug 2012 04:15:00 GMT</pubDate><guid>http://www.cppblog.com/wc250en007/archive/2012/08/30/188728.html</guid><wfw:comment>http://www.cppblog.com/wc250en007/comments/188728.html</wfw:comment><comments>http://www.cppblog.com/wc250en007/archive/2012/08/30/188728.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wc250en007/comments/commentRss/188728.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wc250en007/services/trackbacks/188728.html</trackback:ping><description><![CDATA[<div>1.应用：<br /><strong>也许需要一个脚本，脚本中有一个参数传递类名，你需要通过类名来动态的创建这个对象，这时候就需要动态创建了</strong><br /><br />&nbsp;2.原理：<br />C++不是动态语言，所以没法从语言机制上实现类的动态创建，但这样的需求却有可能存在，一个类似的例子便是MFC中CWnd类的Create方法，其第一个参数为Window Class的名字，这就允许用户通过class的名字来创建相应的窗口。</div><div>&nbsp;要想实现这一点，<span style="color: red; ">必须有一个&#8220;管理中心&#8221;，用于登记类的名字，并且通过名字能够调用对应的创建方法来创建相应的实例</span>。结合类工厂的设计思想，这里我们让一套继承体系中的基类作为&#8220;管理中心&#8221;，由它来维护所有派生类的必要信息，包括类名和工厂函数，这二者必须建立起映射关系，map是不错的选择。定义了一个派生类后，它就自动向基类进行注册<br /><br />3.实现:<br />可以用宏来代替：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">/*</span><span style="color: #008000; ">*&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;实现原理:<br />&nbsp;&nbsp;&nbsp;&nbsp;基类里面用map管理所有需要动态创建&nbsp;【类名-创建对象的函数指针】<br />&nbsp;&nbsp;&nbsp;&nbsp;基类声明中需要添加&nbsp;DECLEAR_DYNCRT_BASE&nbsp;宏,cpp实现中要添加&nbsp;IMPLEMENT_DYNCRT_BASE&nbsp;宏<br />&nbsp;&nbsp;&nbsp;&nbsp;派生类声明中需要添加&nbsp;DECLEAR_DYNCRT_CLASS&nbsp;宏，cpp实现中要添加&nbsp;IMPLEMENT_DYNCRT_CLASS&nbsp;宏<br />&nbsp;&nbsp;&nbsp;&nbsp;派生类宏中创建了一个全局对象向基类map中注册【类名-创建对象的函数指针】<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />#include&nbsp;&lt;map&gt;<br /><br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;声明具有动态创建的基类</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">#define</span>&nbsp;DECLEAR_DYNCRT_BASE(base)&nbsp;\<br /><span style="color: #0000FF; ">public</span>:&nbsp;\<br />typedef&nbsp;<span style="color: #0000FF; ">base</span>*&nbsp;(*ClassGen)();&nbsp;\<br /><span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;_register(<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;class_name,&nbsp;ClassGen&nbsp;class_gen)&nbsp;\<br />{&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;class_set.insert(std::map&lt;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*,&nbsp;ClassGen&gt;::value_type(class_name,&nbsp;class_gen));&nbsp;\<br />}&nbsp;\<br /><span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">base</span>*&nbsp;create(<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;class_name)&nbsp;\<br />{&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;std::map&lt;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*,&nbsp;ClassGen&gt;::iterator&nbsp;it&nbsp;=&nbsp;class_set.find(class_name);&nbsp;&nbsp;&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(it&nbsp;!=&nbsp;class_set.end())&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(it-&gt;second)();&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;NULL;&nbsp;\<br />}&nbsp;\<br /><span style="color: #0000FF; ">protected</span>:&nbsp;\<br /><span style="color: #0000FF; ">static</span>&nbsp;std::map&lt;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*,&nbsp;ClassGen&gt;&nbsp;class_set;<br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;用于实现基类</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">#define</span>&nbsp;IMPLEMENT_DYNCRT_BASE(base)&nbsp;\<br />std::map&lt;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*,&nbsp;<span style="color: #0000FF; ">base</span>::ClassGen&gt;&nbsp;<span style="color: #0000FF; ">base</span>::class_set;<br /><br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;用于声明一个能够被动态创建的类(用一个全局对象进行注册)</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">#define</span>&nbsp;DECLEAR_DYNCRT_CLASS(derived,&nbsp;base)&nbsp;\<br /><span style="color: #0000FF; ">public</span>:&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;derived##register&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;derived##register()&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;bRegister&nbsp;=&nbsp;<span style="color: #0000FF; ">false</span>;&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!bRegister)&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">base</span>::_register(#derived,&nbsp;_CreateObjectByName);&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bRegister&nbsp;=&nbsp;<span style="color: #0000FF; ">true</span>;&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;};&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">base</span>*&nbsp;_CreateObjectByName()&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;derived;&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;用于实现一个能被动态创建的类</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">#define</span>&nbsp;IMPLEMENT_DYNCRT_CLASS(derived)&nbsp;\<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;derived::derived##register&nbsp;_##derived##global_object;</div><br />我们需要做的就是是哦那个这四个宏<br />附加上测试代码：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;测试实例:</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">class</span>&nbsp;Base<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;DECLEAR_DYNCRT_BASE(Base)<br />&nbsp;&nbsp;&nbsp;&nbsp;DECLEAR_DYNCRT_CLASS(Base,&nbsp;Base)<br /><span style="color: #0000FF; ">public</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">virtual</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Print()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;&lt;&lt;&nbsp;"This&nbsp;is&nbsp;base!"&nbsp;&lt;&lt;&nbsp;std::endl;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />};<br /><br />IMPLEMENT_DYNCRT_BASE(Base)<br />IMPLEMENT_DYNCRT_CLASS(Base)<br /><br /><br /><span style="color: #0000FF; ">class</span>&nbsp;Derived&nbsp;:&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;Base<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;DECLEAR_DYNCRT_CLASS(Derived,&nbsp;Base)<br /><span style="color: #0000FF; ">public</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">virtual</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Print()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;&lt;&lt;&nbsp;"This&nbsp;is&nbsp;derived!"&nbsp;&lt;&lt;&nbsp;endl;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />};<br />IMPLEMENT_DYNCRT_CLASS(Derived)<br /><br /><br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;Base*&nbsp;<span style="color: #0000FF; ">base</span>&nbsp;=&nbsp;Base::create("Base");<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(<span style="color: #0000FF; ">base</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">base</span>-&gt;Print();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;system("pause");<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}</div><br /><br />参考地址：<a href="http://blog.csdn.net/freefalcon/article/details/109275">http://blog.csdn.net/freefalcon/article/details/109275</a>&nbsp;<br /><br /><br /></div><img src ="http://www.cppblog.com/wc250en007/aggbug/188728.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wc250en007/" target="_blank">风轻云淡</a> 2012-08-30 12:15 <a href="http://www.cppblog.com/wc250en007/archive/2012/08/30/188728.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cocos2d-x UI之技能冷却按钮</title><link>http://www.cppblog.com/wc250en007/archive/2012/08/28/188511.html</link><dc:creator>风轻云淡</dc:creator><author>风轻云淡</author><pubDate>Tue, 28 Aug 2012 03:33:00 GMT</pubDate><guid>http://www.cppblog.com/wc250en007/archive/2012/08/28/188511.html</guid><wfw:comment>http://www.cppblog.com/wc250en007/comments/188511.html</wfw:comment><comments>http://www.cppblog.com/wc250en007/archive/2012/08/28/188511.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wc250en007/comments/commentRss/188511.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wc250en007/services/trackbacks/188511.html</trackback:ping><description><![CDATA[<div><div>技能冷却的效果跟魔兽世界中的技能冷却类似，功能如下:</div><div></div><div>技能图标点击时会有按下效果，抬起后开始冷却计时，冷却计时技术后该图标才可以再次进行点击。</div><br />对应的图片资源：</div><div><span style="color: red; ">&nbsp; &nbsp; <strong>注意</strong>:添加child时要注意上下层</span></div><div><span style="color: red; ">&nbsp; &nbsp; 最下方是CCMenuItemImage 按钮图片</span></div><div><span style="color: red; ">&nbsp; &nbsp; 其次是模版图片 半透明模版图片</span></div><div><span style="color: red; ">&nbsp; &nbsp; 最上方是CCProgressTimer 图片是最下图中较大的那个盾牌图片</span></div><div>这是使用的图片资源</div><div>&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/wc250en007/cocos2d-x/normal.png" border="0" alt="" width="64" height="64" />&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/wc250en007/cocos2d-x/click.png" border="0" alt="" width="64" height="64" />&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/wc250en007/cocos2d-x/stencil.png" border="0" alt="" width="64" height="64" /></div><div></div><div><strong>动画原理</strong>：</div><div>非冷却状态时只显示CCMenuItemImage，当冷却开始计时时，将按钮设为不可点击状态，同将半透明模板和进度条精灵设置为可见状态，并且进度条精灵开始进行旋转动作，旋转结束后在回调函数中将半透明模板和进度条精灵设为不可见，按钮重新设置为可点击状态。<br /><br /><strong>使用方法</strong>：<br /><div>创建一个SkillButton指针，修改冷却时间，动画表现(如蒙板从旋转改为竖直方向)，并将SkillButton添加到layer上即可。<br /><br />传个效果图<br /><img src="http://www.cppblog.com/images/cppblog_com/wc250en007/cocos2d-x/SkillButton.png" border="0" alt="" width="636" height="238" /><br /><br /><br /><div>SkillButton.h</div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">/*</span><span style="color: #008000; ">*&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;实现技能冷却效果&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Notice:添加child时要注意上下层关系<br />&nbsp;&nbsp;&nbsp;&nbsp;最下方是按钮&nbsp;其次是半透明的模版图片&nbsp;最上方是CCProgressTimer进度条精灵<br /></span><span style="color: #008000; ">*/</span><br />#ifndef&nbsp;_SKILLBUTTON_H_<br /><span style="color: #0000FF; ">#define</span>&nbsp;_SKILLBUTTON_H_<br />#include&nbsp;&lt;cocos2d.h&gt;<br /><br /><span style="color: #0000FF; ">class</span>&nbsp;SkillButton&nbsp;:&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;cocos2d::CCNode<br />{<br /><span style="color: #0000FF; ">public</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;SkillButton();<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">virtual</span>&nbsp;~SkillButton();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">*&nbsp;创建一个SkillButton对象<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;SkillButton*&nbsp;createSkillButton(<span style="color: #0000FF; ">float</span>&nbsp;cdTime,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;stencil_file_name,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;button_normal_name,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;button_click_name);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">*&nbsp;CD时间设置<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;&nbsp;&nbsp;&nbsp;setCDTime(<span style="color: #0000FF; ">float</span>&nbsp;time)&nbsp;{&nbsp;mCDTime&nbsp;=&nbsp;time;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">float</span>&nbsp;&nbsp;&nbsp;getCDTime()&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;{&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;mCDTime;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">*&nbsp;技能按钮点击回调&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;&nbsp;&nbsp;&nbsp;skillClickCallBack(cocos2d::CCObject*&nbsp;obj);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">*&nbsp;技能冷却完毕回调</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;&nbsp;&nbsp;&nbsp;skillCoolDownCallBack(cocos2d::CCNode*&nbsp;node);<br /><br /><span style="color: #0000FF; ">private</span>:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">*&nbsp;初始化&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;&nbsp;&nbsp;&nbsp;init(<span style="color: #0000FF; ">float</span>&nbsp;cdTime,&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;stencil_file_name,&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;button_normal_name,&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;button_click_name);<br /><br /><span style="color: #0000FF; ">private</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;cocos2d::CCMenuItemImage*&nbsp;&nbsp;&nbsp;mItemSkill;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;技能按钮</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;cocos2d::CCMenu*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mMenuSkill;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;技能按钮所在menu</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;cocos2d::CCSprite*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mStencil;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;蒙板精灵,黑色半透明(这个是为了显示一个冷却计时效果)</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;cocos2d::CCProgressTimer*&nbsp;&nbsp;&nbsp;mProgressTimer;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;时间进度条精灵(360度旋转)</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">float</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mCDTime;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;CD时间</span><span style="color: #008000; "><br /></span>};<br /><br /><br /><span style="color: #0000FF; ">#endif</span></div><br /><br />SkillButton.cpp<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#include&nbsp;"SkillButton.h"<br /><br /><br />USING_NS_CC;<br /><br />SkillButton::SkillButton():<br />&nbsp;&nbsp;&nbsp;&nbsp;mItemSkill(NULL),<br />&nbsp;&nbsp;&nbsp;&nbsp;mMenuSkill(NULL),<br />&nbsp;&nbsp;&nbsp;&nbsp;mStencil(NULL),<br />&nbsp;&nbsp;&nbsp;&nbsp;mProgressTimer(NULL),<br />&nbsp;&nbsp;&nbsp;&nbsp;mCDTime(1.f)<br />{<br /><br />}<br /><br />SkillButton::~SkillButton()<br />{<br /><br />}<br /><br />SkillButton*&nbsp;SkillButton::createSkillButton(<span style="color: #0000FF; ">float</span>&nbsp;cdTime,&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;stencil_file_name,&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;button_normal_name,&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;button_click_name)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;SkillButton*&nbsp;skillButton&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;SkillButton();<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(skillButton&nbsp;&amp;&amp;&nbsp;skillButton-&gt;init(cdTime,&nbsp;stencil_file_name,&nbsp;button_normal_name,&nbsp;button_click_name))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;skillButton-&gt;autorelease();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;skillButton;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;skillButton;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;skillButton&nbsp;=&nbsp;NULL;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;NULL;<br />}<br /><br /><span style="color: #0000FF; ">bool</span>&nbsp;SkillButton::init(<span style="color: #0000FF; ">float</span>&nbsp;cdTime,&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;stencil_file_name,&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;button_normal_name,&nbsp;<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;button_click_name)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;CCAssert(stencil_file_name,&nbsp;"SkillButton::init&nbsp;stencil_file_name&nbsp;!=&nbsp;NULL");<br />&nbsp;&nbsp;&nbsp;&nbsp;CCAssert(button_normal_name,&nbsp;"SkillButton::init&nbsp;button_normal_name&nbsp;!=&nbsp;NULL");<br />&nbsp;&nbsp;&nbsp;&nbsp;CCAssert(button_click_name,&nbsp;"SkillButton::init&nbsp;button_click_name&nbsp;!=&nbsp;NULL");<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Notice:添加child时要注意上下层<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;最下方是CCMenuItemImage&nbsp;其次是模版图片&nbsp;最上方是CCProgressTimer<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;添加技能按钮</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;mItemSkill&nbsp;=&nbsp;CCMenuItemImage::create(button_normal_name,&nbsp;button_click_name,&nbsp;<span style="color: #0000FF; ">this</span>,&nbsp;menu_selector(SkillButton::skillClickCallBack));<br />&nbsp;&nbsp;&nbsp;&nbsp;mItemSkill-&gt;setPosition(CCPointZero);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;mMenuSkill&nbsp;=&nbsp;CCMenu::create(mItemSkill,&nbsp;NULL);<br />&nbsp;&nbsp;&nbsp;&nbsp;mMenuSkill-&gt;setPosition(CCPointZero);<br />&nbsp;&nbsp;&nbsp;&nbsp;addChild(mMenuSkill,&nbsp;-100);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;添加阴影模版</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;mStencil&nbsp;=&nbsp;CCSprite::create(stencil_file_name);<br />&nbsp;&nbsp;&nbsp;&nbsp;mStencil-&gt;setPosition(CCPointZero);<br />&nbsp;&nbsp;&nbsp;&nbsp;mStencil-&gt;setVisible(<span style="color: #0000FF; ">false</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;addChild(mStencil);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;添加旋转进度条精灵</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;CCSprite*&nbsp;progressSprite&nbsp;=&nbsp;CCSprite::create(button_normal_name);<br />&nbsp;&nbsp;&nbsp;&nbsp;mProgressTimer&nbsp;=&nbsp;CCProgressTimer::create(progressSprite);<br />&nbsp;&nbsp;&nbsp;&nbsp;mProgressTimer-&gt;setPosition(CCPointZero);<br />&nbsp;&nbsp;&nbsp;&nbsp;mProgressTimer-&gt;setVisible(<span style="color: #0000FF; ">false</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;addChild(mProgressTimer,&nbsp;100);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;mCDTime&nbsp;=&nbsp;cdTime;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br />}<br /><br /><span style="color: #008000; ">/*</span><span style="color: #008000; ">*&nbsp;技能按钮点击回调&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #0000FF; ">void</span>&nbsp;SkillButton::skillClickCallBack(cocos2d::CCObject*&nbsp;obj)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;冷却计时，即时状态技能按钮不可点击</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;mItemSkill-&gt;setEnabled(<span style="color: #0000FF; ">false</span>);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;模版可见</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;mStencil-&gt;setVisible(<span style="color: #0000FF; ">true</span>);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;设置精灵进度条为顺时针</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;mProgressTimer-&gt;setVisible(<span style="color: #0000FF; ">true</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;mProgressTimer-&gt;setType(kCCProgressTimerTypeRadial);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">准备一个5秒旋转360度的动画(逐渐覆盖半透模板形成冷却效果;这里进行计时冷却动画的实现和时间控制)</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;CCActionInterval*&nbsp;action_progress_to&nbsp;=&nbsp;CCProgressTo::create(mCDTime,&nbsp;100);<br />&nbsp;&nbsp;&nbsp;&nbsp;CCCallFunc*&nbsp;action_callback&nbsp;=&nbsp;CCCallFuncN::create(<span style="color: #0000FF; ">this</span>,&nbsp;callfuncN_selector(SkillButton::skillCoolDownCallBack));<br />&nbsp;&nbsp;&nbsp;&nbsp;mProgressTimer-&gt;runAction(CCSequence::create(action_progress_to,&nbsp;action_callback,&nbsp;NULL));<br />}<br /><br /><span style="color: #008000; ">/*</span><span style="color: #008000; ">*&nbsp;技能冷却完成回调&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #0000FF; ">void</span>&nbsp;SkillButton::skillCoolDownCallBack(CCNode*&nbsp;node)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;设置蒙板不可见</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;mStencil-&gt;setVisible(<span style="color: #0000FF; ">false</span>);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;进度条技能不可见</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;mProgressTimer-&gt;setVisible(<span style="color: #0000FF; ">false</span>);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;按钮置为可用</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;mItemSkill-&gt;setEnabled(<span style="color: #0000FF; ">true</span>);<br />}</div><br />测试代码：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&nbsp; &nbsp; mSkillButton&nbsp;=&nbsp;SkillButton::createSkillButton(2.f,&nbsp;"stencil.png",&nbsp;"normal.png",&nbsp;"click.png");<br />&nbsp;&nbsp;&nbsp;&nbsp;mSkillButton-&gt;setPosition(ccp(s.width/2,&nbsp;s.height/2));<br />&nbsp;&nbsp;&nbsp;&nbsp;addChild(mSkillButton);</div><br /><a title="代码下载" href="/Files/wc250en007/cocos2d-x/SkillButton.rar">代码下载</a><br /><br />参考地址：<br /><a href="http://blog.sina.com.cn/s/blog_732784f70100umuj.html">http://blog.sina.com.cn/s/blog_732784f70100umuj.html</a>&nbsp;<br /><a href="http://www.cocos2dev.com/?p=64">http://www.cocos2dev.com/?p=64</a>&nbsp;<br /><br /></div></div><img src ="http://www.cppblog.com/wc250en007/aggbug/188511.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wc250en007/" target="_blank">风轻云淡</a> 2012-08-28 11:33 <a href="http://www.cppblog.com/wc250en007/archive/2012/08/28/188511.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cocos2d-x 给Sprite添加Mask（遮罩)</title><link>http://www.cppblog.com/wc250en007/archive/2012/08/26/188362.html</link><dc:creator>风轻云淡</dc:creator><author>风轻云淡</author><pubDate>Sun, 26 Aug 2012 15:06:00 GMT</pubDate><guid>http://www.cppblog.com/wc250en007/archive/2012/08/26/188362.html</guid><wfw:comment>http://www.cppblog.com/wc250en007/comments/188362.html</wfw:comment><comments>http://www.cppblog.com/wc250en007/archive/2012/08/26/188362.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wc250en007/comments/commentRss/188362.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wc250en007/services/trackbacks/188362.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 教程截图：　　有时候，你在做游戏时，可能需要一种方式来显示精灵的某一部分（就是添加遮罩啦）。　　一种方式就是使用另外一张图片，叫做mask。你把mask图片中间设置成白色，白色区域是被mask图片的可见区域。之后这个白色区域会透明的。　　然后，你可以使用本教程提供的方法来把mask图和原图结合起来，然后创建如上图所示的效果。　　你会发现本教程提供的方法非常方便，用它可以完成许多...&nbsp;&nbsp;<a href='http://www.cppblog.com/wc250en007/archive/2012/08/26/188362.html'>阅读全文</a><img src ="http://www.cppblog.com/wc250en007/aggbug/188362.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wc250en007/" target="_blank">风轻云淡</a> 2012-08-26 23:06 <a href="http://www.cppblog.com/wc250en007/archive/2012/08/26/188362.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>