原始依赖关系
libxml++
|--libxml2
|--glibmm
|--libsigc++
|--glib2.0
|--libffi
libxml++主要是使用了glibmm的Glib::ustring和Glib::Threads::Mutex两个类
2.Glib::ustring::format()主要使用在int转换为string,所以可以用boost::lexical_cast<std::string>或者封装成对 itoa的调用都可以
3.Glib::Threads::Mutex 互斥锁,和boost::mutex功能一样;Glib::Threads::Mutex::Lock范围锁, 和boost::mutex::scoped_lock功能一样
使用boost好处在于boost::lexical_cast和boost::mutex都只要头文件就可以
新的依赖关系
libxml++
|--libxml2
|--boost::lexical_cast(头文件)
|--boost::mutex(头文件)
==========
主要改动
1.Glib::ustring::format => boost::lexical_cast<std::string>
2.Glib::ustring => std::string
3.Glib::Threads::Mutex => boost::mutex
4.G_STRFUNC => __FUNCTION__
========== 使用方法 tar -xJvf libxml++-2.38.0-no-glibmm.txz cd libxml++-2.38.0-no-glibmm make make install
===========================
修改步骤
下载原始的源文件及其相关依赖的库
libxml++-2.38.0.tar.gz
--- 1..编译源文件及其相关依赖的库文件,生成出Makefile
编辑Makefile去掉glibmm相关的 -I -L -l
--- 2. 行末的“\”是连接符,将他们改为一行后请手动去掉 cd <path_to_libxml++-2.38.0> sed -i "s/glibmm\/ustring.h/string>\n#include <boost\/lexical_cast.hpp/g" libxml++/exceptions/exception.h find libxml++ -name "*.h" \ -exec sed -i "s/glibmm\/ustring.h/string/g" {} \; \ -exec sed -i "s/Glib::ustring::format/boost::lexical_cast<std::string>/g" {} \; \ -exec sed -i "s/Glib::ustring/std::string/g" {} \; \ -exec sed -i "s/.bytes(/.length(/g" {} \; \ -exec sed -i "s/glibmm\/threads.h/boost\/thread.hpp/g" {} \; \ -exec sed -i "s/Glib::Threads::Mutex::Lock/boost::mutex::scoped_lock/g" {} \; \ -exec sed -i "s/Glib::Threads::Mutex/boost::mutex/g" {} \; \ -exec sed -i "s/G_STRFUNC/__FUNCTION__/g" {} \; find libxml++ -name "*.cc" \ -exec sed -i "s/glibmm\/ustring.h/string/g" {} \; \ -exec sed -i "s/Glib::ustring::format/boost::lexical_cast<std::string>/g" {} \; \ -exec sed -i "s/Glib::ustring/std::string/g" {} \; \ -exec sed -i "s/.bytes(/.length(/g" {} \; \ -exec sed -i "s/glibmm\/threads.h/boost\/thread.hpp/g" {} \; \ -exec sed -i "s/Glib::Threads::Mutex::Lock/boost::mutex::scoped_lock/g" {} \; \ -exec sed -i "s/Glib::Threads::Mutex/boost::mutex/g" {} \; \ -exec sed -i "s/G_STRFUNC/__FUNCTION__/g" {} \; --- 3.修改文件libxml++/schemabase.h ("-" delete,"+"insert) @@ -21,10 +21,7 @@ #include <libxml++/noncopyable.h> -namespace Glib -{ -class ustring; -} +#include <string> --- 4. 修改libxml++/parsers/parser.cc 文件里面的"Parser::initialize_context()" 函数("-" delete,"+"insert) void Parser::initialize_context() { - Glib::Threads::Mutex::Lock lock(extra_parser_data_mutex); +ExtraParserData extra_parser_data_; +{ + boost::mutex::scoped_lock lock(extra_parser_data_mutex); //Clear these temporary buffers: extra_parser_data[this].parser_error_.erase(); @@ -142,8 +144,9 @@ // Take a copy of the extra data,so we don't have to access // the extra_parser_data map more than necessary. - const ExtraParserData extra_parser_data_this = extra_parser_data[this]; - lock.release(); + extra_parser_data_ = extra_parser_data[this]; +} +const ExtraParserData& extra_parser_data_this = extra_parser_data_; //Disactivate any non-standards-compliant libxml1 features. //These are disactivated by default,but if we don't deactivate them for each context @@ -210,13 +213,13 @@ } }