项目中BOOST版本升级遇到的问题

本周升级BOOST版本库。

现在由于要用到BOOST中的ASIO库,BOOST ASIO 从1.45 到1.53修改了不少BUG,所以要升级到BOOST 1.53

新版本的BOOST 1.53编译 按照官方文档来,很容易完成。

将工程中的旧版BOOST替换掉,更改了一些编译问题。主要是因为新版的一些头文件引用更改还有部分函数接口的改变导致。

修改完毕这些问题,在WINDOWS下一切正常。

但是在LINUX服务器上遇到两个问题。

1.luabind的头文件中,类似于下面这样的一段代码编译不通过

#if
//code
#elif
//code
#endif

用boost 1.45版本的时候,就没有问题

百思不得其解,GOOGLE到了一个解决方法,链接如下:

https://svn.boost.org/trac/boost/ticket/6631

大体是讲上面的代码修改为即可

#if
//code
#else
   #if
    //code
   #endif
#endif

2.修改完上面的问题后,LINUX可以正常编译,但是启动程序的时候总是出现segment fault

从代码上,一个deque中size明显超常。gdb中的栈都是??,栈都被破坏了,无法用gdb调试。

但是用到deque的地方还比较多,如果人肉暴力审代码是下下策。

这个错误该如何解决呢?GOOGLE到了这个valgrind工具。

简单编译安装valgrind后,借助它轻松找到了问题所在。

原因是,项目中用到了boost 的filesystem。

这个库之前是V2版本,1.53中是V3版本。

V2中有一些函数被删掉了,编译的时候就出错,已经改了。

还有一些函数V2中没有删除,V3中有了新的替代函数,官方建议都换为V3,不过也支持V2的旧函数。

问题就出在旧的函数接口:path.leaf()。这个接口在WINDOWS下正常,但是在LINUX下就有问题,

导致执行low_bound( deque.begin(),deque.end(), path.leaf())的时候陷入死循环。为啥??还不知道。。。。

将其改为新结构path.filename()就正常了。

 

valgrind是个不错的工具,接下来需要仔细学习一下。

 

 

转载于:https://www.cnblogs.com/hours10000/archive/2013/02/28/2937193.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Boost库是一个经过千锤百炼、可移植、提供源代码的C++库,,作为标准库的后备,是C++标准化进程的发动机之一。 Boost库由C++标准委员会库工作组成员发起,其有些内容有望成为下一代C++标准库内容。在C++社区影响甚大,其成员已近2000人。 Boost库为我们带来了最新、最酷、最实用的技术,是不折不扣的“准”标准库。   可从http://sourceforge.net/project/showfiles.php?group_id=7586下载安装boost库。大部分boost库功能的使用只需包括相应头文件即可,少数(如正则表达式库,文件系统库等)需要链接库。里面有许多具有工业强度的库,如graph库。   Boost比较有名气的有这么几个库:   Regex   正则表达式库   Spirit   LL parser framework,用C++代码直接表达EBNF   Graph   图组件和算法   Lambda   在调用的地方定义短小匿名的函数对象,很实用的functional功能   concept check   检查泛型编程的concept   Mpl   用模板实现的元编程框架   Thread   可移植的C++多线程库   Python   把C++类和函数映射到Python之   Pool   内存池管理   smart_ptr   5个智能指针,学习智能指针必读,一份不错的参考是来自CUJ的文章:   Smart Pointers in Boost,哦,这篇文章可以查到,CUJ是提供在线浏览的。文版见笔者在《Dr.Dobb's Journal软件研发杂志》第7辑上的译文。   Boost总体来说是实用价值很高,质量很高的库。并且由于其对跨平台的强调,对标准C++的强调,是编写平台无关,现代C++的开发者必备的工具。但是Boost也有很多是实验性质的东西,在实际的开发实用需要谨慎。并且很多Boost的库功能堪称对语言功能的扩展,其构造用尽精巧的手法,不要贸然的花费时间研读。Boost另外一面,比如Graph这样的库则是具有工业强度,结构良好,非常值得研读的精品代码,并且也可以放心的在产品代码多多利用。   boost英文解释:推进   boost 在一些播放软件和音效指增强,比如Bass Boost,低音增强。 提示: 这是boostpro定制安装更新版, 可以选择自己需要的库. 包括1.33到1.40所有版本. 如要最新可去http://www.boostpro.com/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值