问题背景

项目在Ubuntu10 64位

boost 1.55,boost采用的是项目内包含相对目录的形式部署

项目采用了 -Wall -Wextra -Werror -Wconversion 最高的告警选项

单独测试是可以的

由于项目中包含的内容很多,头文件超多,因此只能选取1个简单的分支进行测试,可以再现问题,通过各种猜测和测试,最终定位到:

有GCC push_option对boost/thread进行处理后,stl容器使用完全异常[如 map<int,string>空内容时begin()!=end(),插入记录崩溃或死循环,2个机器上运行有细微差别,死循环时gdb attach可以看到map操作无法结束];而不用push_option时一切正常

解决方法

gcc -E 查看代码的预处理结果看到内容太多,没有再细致分析

既然gcc的这个选项和boost的thread有冲突,查看gcc的push_option说明,可见这个针对的时gcc 4.4,而ubuntu默认的gcc是version 4.4.3 (Ubuntu 4.4.3-4ubuntu5.1) ,猜测是否这个实现有些问题

既然此路不同,我们是否可以把第三方库当成系统库用,最简单的方法时拷贝到/usr/include这类目录,但这个方法不实用

查gcc的手册,还真有这个选项-isystem https://gcc.gnu.org/onlinedocs/gcc-4.4.7/gcc/Preprocessor-Options.html#Preprocessor-Options

-isystem ${ProjDirPath}/../../others

最终项目配置成这个选项进行编译即可

例子

单独新建工程如下,反而是正常的

g++ -L/opt/work/lib/static -L/opt/work/lib/ -o "zdemo"  ./src/demo.o   -lboost_system -lrt -lpthread -lboost_thread

#include <iostream>

#include <vector>

#include <map>

#pragma GCC push_options

#pragma GCC diagnostic ignored "-Wconversion"

#include <boost/thread.hpp>

#pragma GCC pop_options

#include <boost/make_shared.hpp>

#include <boost/bind.hpp>

using namespace std;

class Demo {

public:

Demo(const string & json){

this->rules[GET].push_back("hello");

this->rules[GET].push_back(json);

}

enum HttpMethod { ANY, GET, POST, PUT, DEL, OTHERS };

typedef vector<string> tRuleContainer;

map<HttpMethod, tRuleContainer> rules;

};

void demoThread(){

Demo u("world");

cout << u.rules.size() << endl;

}

int main() {

boost::shared_ptr<boost::thread> thrMon;

thrMon = boost::make_shared<boost::thread>(boost::bind(&demoThread));

Demo u("world");

cout << u.rules.size() << endl;

thrMon->join();

return 0;

}

gcc boost版本冲突解决日记的更多相关文章

  1. [转]SVN版本冲突解决详解

    原文地址:http://blog.csdn.net/windone0109/article/details/4857044 版权声明:本文为博主原创文章,未经博主允许不得转载. 版本冲突原因: 假设A ...

  2. SVN常见错误和版本冲突解决

    之前在Eclipse下面误删除了svn的一些插件包,后来重装了就问题重重,在这里还是建议, Windows下SVN最好使用桌面版,在文件管理器下面更新和提交. 1.常见错误整理 #, c-format ...

  3. SVN版本冲突解决详解

    SVN版本冲突解决详解 分类: SVN(SubVersion)2009-11-23 15:45 27014人阅读 评论(12) 收藏 举报 svnsubversion服务器文档工作c 版本冲突原因: ...

  4. 【转】svn冲突问题详解 SVN版本冲突解决详解

    (摘自西西软件园,原文链接http://www.cr173.com/html/46224_1.html) 解决版本冲突的命令.在冲突解决之后,需要使用svnresolved来告诉subversion冲 ...

  5. svn冲突问题详解 SVN版本冲突解决详解

    svn冲突问题详解 SVN版本冲突解决详解 (摘自西西软件园,原文链接http://www.cr173.com/html/46224_1.html) 解决版本冲突的命令.在冲突解决之后,需要使用svn ...

  6. .Net Framework项目引用.NetStandard标准库出现版本冲突解决办法

    今天在工作中出现一个引用问题,害我找问题找了很久.起因是在一个Winform项目下需要引用一个.NetStandard标准库,标准库引用了System.ComponentModel.Annotatio ...

  7. Newtonsoft.Json 版本冲突解决

    在做asp.net MVC 开发时,因为引用的dll 中使用了更高版本的 Newtonsoft.Json ,导致运行时发生错误, 查资料说是因为webApi使用了Newtonsoft.Json 导致了 ...

  8. SVN版本冲突解决

    解决冲突有三种选择: A.放弃自己的更新,使用svn revert(回滚),然后提交.在这种方式下不需要使用svn resolved(解决) B.放弃自己的更新,使用别人的更新.使用最新获取的版本覆盖 ...

  9. linux 编译kernel与svn版本冲突解决方法 [drivers/gpu/mali/mali/common/mali_kernel_core.o] 错误 1

    问题: 系统正常编译linux系统kernel,安装svn后,kernel编译出错. 错误: CHK     include/linux/version.h  CHK     include/gene ...

随机推荐

  1. 推荐12个漂亮的 CSS3 按钮实现方案

    在过去,我们都是使用图片或者JavaScript来实现漂亮的按钮效果,随着越来越多的浏览器对CSS3的支持和完善,使用CSS3来实现美观的按钮已没有太多的障碍.今天,本文收集了12个很不错的CSS3按 ...

  2. OpenCascade MeshVS Usage

    OpenCascade MeshVS Usage eryar@163.com Abstract. MeshVS means Mesh Visualization Service. It can be ...

  3. 前端学PHP之面向对象系列第一篇——类和对象

    × 目录 [1]类 [2]成员属性[3]成员方法[4]对象[5]成员访问[6]this 前面的话 面向对象程序设计(OOP)是一种计算机编程架构.计算机程序由单个能够起到子程序作用的单元或对象组成,为 ...

  4. 深入学习jQuery元素尺寸和位置操作

    × 目录 [1]尺寸设置 [2]位置设置 前面的话 对于javascript来说,元素尺寸有scroll.offset.client三大属性,以及一个强大的getBoundingClientRect( ...

  5. 统计Go, Go, Go

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢!   结束了概率论,我们数据之旅的下一站是统计.这一篇,是统计的一个小介绍.   统 ...

  6. No row with the given identifier exists:

    最近在弄一个后台项目,有用到hibernate操作数据库.写hql语句表一对一关联查询的时候报这个错误.受到了csdn上一篇博客的启发,解决了我的问题.他的博客地址:http://blog.csdn. ...

  7. 小菜学习设计模式(二)—单例(Singleton)模式

    前言 设计模式目录: 小菜学习设计模式(一)—模板方法(Template)模式 小菜学习设计模式(二)—单例(Singleton)模式 小菜学习设计模式(三)—工厂方法(Factory Method) ...

  8. T-Sql(三)存储过程(Procedure)

    今天讲下T-sql语法中存储过程的用法,我们一开始学习数据库语言的时候就是用一些简单的insert,select等语法,但是随着我们学习数据库的深入,就会发现一些简单的语法满足不了我们的要求,比如处理 ...

  9. 把《c++ primer》读薄(4-2 c和c++的数组 和 指针初探)

    督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 问题1.我们知道,将一个数组赋给另一个数组,就是将一个数组的元素逐个赋值给另一数组的对应元素,相应的,将一个vector 赋给另 ...

  10. 大数据实践-数据同步篇tungsten-relicator(mysql->mongo)

    // mongo)";digg_bgcolor = "#FFFFFF";digg_skin = "normal"; // ]]> // [导读] ...