mongo::client::initialize() cause crash
来源:互联网 发布:外汇行情数据分析 编辑:程序博客网 时间:2024/06/10 04:51
在使用monod的C++ driver时,使用**mongo::client::initialize()** 方法会导致应用程序crash。
首先要明确一下:
首先要明确一下:
- mongo::client::initialize()方法是legacy driver的方法,不推荐和3.X的driver一起使用。
- C++ driver是依赖于boost的
mongo::client::initialize()方法中会使用到Option类,但是这个类在头文件中没有定义析构函数,所以就会依赖于编译器来自动推导会这是自动生成的析构函数。crash的原因是,C++的编译器在不同的情况下的推导类型不一样。
case 1
不同的g++版本推导出来的析构函数不一样。所以,如果你的应用程序是用C++11编译的,但是你的driver不是用C++11编译的,肯定会crash。
- For non-C++ 11 builds you typedef stdx::function<T> to be boost::function<T>.
- For C++ 11 builds you typedef it to be std::function<T>.
https://jira.mongodb.org/browse/CXX-558
case 2.
应用程序的debug版本和release版本生成的析构函数也不一样。这里没有具体的去验证,只是猜想:debug的时候是-g,不会进行优化,这样会编译器会生成Option的析构函数,所以程序不会crash; 但是release版本时,编译器会将要隐式的析构函数drop掉,在link的时候,又发现需要这个函数,于是又生成了一个错误的,然后程序一运行就crash。
阅读全文
0 0
- mongo::client::initialize() cause crash
- mongo gui client
- lotus notes client crash
- Spring整合mongo-client示例
- Spring Data MongoDB <mongo:mongo-client … />配置
- 看看CameraClient 的client->initialize(mModule) 过程
- 'Cause ...
- Playback.initialize does not clean up cause playback error for STA
- with root cause java.lang.NoClassDefFoundError:Could not initialize class com.AlipaySubmit
- Could not initialize class com.taobao.diamond.client.impl.DiamondEnvRepo
- NoClassDefFoundError: Could not initialize class org.springframework.web.client.RestTemplate
- ORA-00494: enqueue [CF] held for too long (more than 900 seconds) cause instance crash
- initialize
- MONGO
- mongo
- mongo
- mongo
- mongo
- Linux下的tar压缩解压缩命令详解
- codeforce Vladik and Complicated Book
- html 布局
- 三级联动
- numpy.random.randn()与rand()的区别
- mongo::client::initialize() cause crash
- photoshop切图
- C语言操作符小结
- 腾讯2017暑期实习生编程题:有趣的数字 [python]
- template 模板2
- 指针及数组深度解析
- flow.js/typescript 这类定义参数类型的意义何在
- 漫谈Hadoop的思想之源:Google
- 存储过程调试