<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[[个人原创]YAML的C++解析器 yaml-cpp的实际编译和使用备案]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Php/Js/Shell/Go]]></category>
<pubDate>Wed, 10 Aug 2011 02:56:20 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	C++下有这一个Yaml的解析包，PHP也有一个Yaml的解析包，这样两者就能进行对文件的解析是一个规则，达到统一的目的，双方就可以通讯，这样语言之间对配置的解析一样，上层通过Socket来通信统一，进而实现大系统的搭建和和谐，呵呵。<br/><br/>首先要有CMake环境，需要编译一个CMake出来，然后才是在下载下来的文件目录下运行这个Cmake：<br/>tar -zxvf cmake-2.8.4.tar.gz<br/>首先，需要下载安装Cmake;<br/>wget http://www.cmake.org/files/v2.8/cmake-2.8.4.tar.gz<br/>安装cmake;<br/><textarea name="code" class="html" rows="15" cols="100">
tar xvzf cmake-2.8.4.tar.gz
./configure
make
make install
</textarea><br/>其次，下载YAML的C++解析器 yaml-cpp ，URL为：http://www.oschina.net/p/yaml-cpp<br/>编译： <br/><textarea name="code" class="html" rows="15" cols="100">
cmake&nbsp;&nbsp;-DBUILD_SHARED_LIBS=ON
</textarea><br/><br/>root@116.255.139.240:/home/admin/c++/yaml_4_C/yaml-cpp# cmake&nbsp;&nbsp;-DBUILD_SHARED_LIBS=ON<br/>-- The C compiler identification is GNU<br/>-- The CXX compiler identification is GNU<br/>-- Check for working C compiler: /usr/bin/gcc<br/>-- Check for working C compiler: /usr/bin/gcc -- works<br/>-- Detecting C compiler ABI info<br/>-- Detecting C compiler ABI info - done<br/>-- Check for working CXX compiler: /usr/bin/c++<br/>-- Check for working CXX compiler: /usr/bin/c++ -- works<br/>-- Detecting CXX compiler ABI info<br/>-- Detecting CXX compiler ABI info - done<br/>-- Performing Test FLAG_WEXTRA<br/>-- Performing Test FLAG_WEXTRA - Success<br/>-- Configuring done<br/>-- Generating done<br/>-- Build files have been written to: /home/admin/c++/yaml_4_C/yaml-cpp<br/>root@116.255.139.240:/home/admin/c++/yaml_4_C/yaml-cpp# make<br/>Scanning dependencies of target yaml-cpp<br/>[&nbsp;&nbsp;3%] Building CXX object CMakeFiles/yaml-cpp.dir/src/emitter.cpp.o<br/>[&nbsp;&nbsp;6%] Building CXX object CMakeFiles/yaml-cpp.dir/src/emitterstate.cpp.o<br/>[&nbsp;&nbsp;9%] Building CXX object CMakeFiles/yaml-cpp.dir/src/simplekey.cpp.o<br/>[ 12%] Building CXX object CMakeFiles/yaml-cpp.dir/src/parser.cpp.o<br/><br/>......<br/><br/>[ 96%] Building CXX object test/CMakeFiles/run-tests.dir/spectests.cpp.o<br/>Linking CXX executable run-tests<br/>[ 96%] Built target run-tests<br/>Scanning dependencies of target parse<br/>[100%] Building CXX object util/CMakeFiles/parse.dir/parse.cpp.o<br/>Linking CXX executable parse<br/>[100%] Built target parse<br/><br/><br/>然后呢： make ，后生成：<br/>/home/admin/c++/yaml_4_C/yaml-cpp/test3<br/>libyaml-cpp.so.0.2.6<br/>libyaml-cpp.so.0.2 -&gt; libyaml-cpp.so.0.2.6<br/>libyaml-cpp.so -&gt; libyaml-cpp.so.0.2<br/><br/><br/>查看H文件位置：<br/>root@116.255.139.240:/home/admin/c++/yaml_4_C/yaml-cpp# find . -name &quot;yaml.h&quot;<br/>./include/yaml-cpp/yaml.h<br/>最后，进行Yaml的代码解析测试：<br/>1）建立目录:<br/>mkdir test3<br/>目录位置：root@116.255.139.240:/home/admin/c++/yaml_4_C/yaml-cpp/test3<br/>2）写入C++测试代码<br/>1.vi test.cpp<br/>加入：<br/><textarea name="code" class="html" rows="15" cols="100">
#include &lt;fstream&gt;
#include &quot;yaml.h&quot;
int main()
&#123;
&nbsp;&nbsp;&nbsp;&nbsp;std::ifstream fin(&quot;component.yaml&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;YAML::Parser parser(fin);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;YAML::Node doc;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(parser.GetNextDocument(doc))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;


&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&#125;
</textarea><br/>3).把yaml.h拷贝到test3的目录下来：<br/><textarea name="code" class="html" rows="15" cols="100">
root@116.255.139.240:/home/admin/c++/yaml_4_C/yaml-cpp/test3# cp ../include/yaml-cpp/yaml.h .&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</textarea><br/>4）后进行编译编译：<br/>g++ -o test test.cpp -I../include/ ../libyaml-cpp.so<br/><br/>5)运行测试<br/>root@116.255.139.240:/home/admin/c++/yaml_4_C/yaml-cpp/test3# ./test<br/>./test: error while loading shared libraries: libyaml-cpp.so.0.2: cannot open shared object file: No such file or directory<br/>6)解决问题：<br/>/home/admin/c++/yaml_4_C/yaml-cpp/test3<br/>libyaml-cpp.so.0.2.6<br/>libyaml-cpp.so.0.2 -&gt; libyaml-cpp.so.0.2.6<br/>libyaml-cpp.so -&gt; libyaml-cpp.so.0.2<br/>root@116.255.139.240:/home/admin/c++/yaml_4_C/yaml-cpp# cp libyaml-cpp.so&nbsp;&nbsp;/usr/lib/<br/>root@116.255.139.240:/usr/lib# ln -s libyaml-cpp.so libyaml-cpp.so.0.2<br/>7)再次执行，得到解决：<br/>再执行就不报错了，原来是没有把这个so给放到/usr/lib下，再就是没有给重新软链接一个,Ok了。<br/>root@116.255.139.240:/home/admin/c++/yaml_4_C/yaml-cpp/test3# ./test<br/>root@116.255.139.240:/home/admin/c++/yaml_4_C/yaml-cpp/test3#<br/>8)自由发挥，放到实际的开发中去。<br/><br/>Yaml实际解析测试：<br/><textarea name="code" class="html" rows="15" cols="100">
 #include &lt;fstream&gt;
 #include &quot;yaml.h&quot;
 #include &lt;stdio.h&gt;
 #include &lt;iostream&gt;
 using namespace std;
 int main()
 &#123;
&nbsp;&nbsp;&nbsp;&nbsp; std::ifstream fin(&quot;component.yaml&quot;);
&nbsp;&nbsp;&nbsp;&nbsp; YAML::Parser parser(fin);
&nbsp;&nbsp;&nbsp;&nbsp; YAML::Node doc;
&nbsp;&nbsp;&nbsp;&nbsp; while(parser.GetNextDocument(doc))
&nbsp;&nbsp;&nbsp;&nbsp; &#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; std::string output;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc[&quot;site&quot;] &gt;&gt; output;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; output &lt;&lt;endl;
&nbsp;&nbsp;&nbsp;&nbsp; &#125;
 &#125;
 </textarea><br/> component.yaml这个Yaml文件的内容：<br/><textarea name="code" class="html" rows="15" cols="100">
site: jackxiang.com
 </textarea><br/> 编译：<br/><textarea name="code" class="html" rows="15" cols="100">
 g++ -g -o test test.cpp -I../include/ ../libyaml-cpp.so
 </textarea><br/> 测试Yaml解析是否成功：<br/><textarea name="code" class="html" rows="15" cols="100">
root@116.255.139.240:/home/admin/c++/yaml_4_C/yaml-cpp/test3# ./test
jackxiang.com
 </textarea><br/>解析成功！！！<br/><br/><br/><br/>最后，当然还有纯C语言的，来解析 YAML 1.1 数据，其编译估计差不多，下载URl：<br/>http://www.oschina.net/p/libyaml<br/><br/>建议用eclipse来开发C++，还有PHP，因为eclipse 有PHP的插件，也有C++的插件，我是用的Zend for eclipse,现在eclipse还有一个Yaml的编辑插件，相关介绍情况如下：<br/>安装YEdit<br/>　　YEdit是一个在Eclipse上编辑YAML文件的插件。当我们我们使用Python进行App Engine的开发，会涉及编辑一些YAML文件，这个插件提供了较好的支持。<br/>&nbsp;&nbsp;&nbsp;&nbsp;这个还是通过Eclipse的更新管理器来完成安装，在对话框中的在Work with中输入http://dadacoalition.org/yedit，然后勾选该插件，然后不断下一步，稍等片刻，安装成功。<br/>eclipse 下的PHP插件参考：http://chenling1018.blog.163.com/blog/static/1480254201012234015728/
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [个人原创]YAML的C++解析器 yaml-cpp的实际编译和使用备案]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>