使用mongodb c ++客户端驱动程序进行分段错误

时间:2015-02-22 16:48:04

标签: c++ linux mongodb

我在使用C ++ mongodb客户端驱动程序的程序中遇到分段错误。 尝试隔离问题我发现这个:有一个类X的堆对象。 在注释掉所有mongo代码时,程序运行正常。 但是如果我将一个BSONObjBuilder类型的成员变量添加到X(只是在不使用它的情况下声明), 然后在大约200K次迭代之后,分配X对象并解除分配,发生故障。 Gdb bt在X的析构函数中显示它,实际上是{},所以它只处理BSONObjBuilder。 看起来可用内存列表已损坏。 将BSONObjBuilder作为堆栈上的局部变量,可以实现数百万次迭代。

我找到了这个相关的问题https://groups.google.com/forum/#!topic/mongodb-user/Ngxh4IOcSPA 这表明存在联系问题。所以我按照指示重建了mongo C ++驱动程序,但是 问题依然存在。关于此事还有这个问题 MongoDB C++ Segmentation Fault 具有类似的重建建议,但适用于较旧的mongo版本。 不是专家,我将非常感谢帮助找出可能导致此错误的库不匹配以及如何正确地重新安装/重建/修复它。

一些细节:

  • 我有ubuntu 14.04.1 LTS
  • dpkg -S /usr/include/boost/version.hpp显示libboost1.54-dev
  • mongod 2.6正在运行,虽然在评论之后我甚至没有连接它。
  • 下载了传统的mongo C ++驱动程序git clone https://github.com/mongodb/mongo-cxx-driver.git
  • 内置scons驱动程序和scons install,它使用g ++,编译得很好,生成了libmongoclient.a
  • 我在Eclipse中的代码也使用g ++,一切都是用-pthread(有多个线程)编译的
  • 为mongo驱动程序填充mongo-cxx-driver / build / include的一条额外包含路径
  • 库链接如下(按顺序):mongoclient,pthread,boost_thread,boost_system,boost_regex
  • 尝试使用pthread最后一个库,没有帮助
  • 调用mongo :: client ::在main中初始化第一个,status返回ok
  • 我在X中有一些BSONObj成员,他们工作正常,直到我还添加了BSONObjBuilder成员
  • 尝试在析构函数中的BSONObjBuilder上调用done()或abandon(),也没有帮助。

0 个答案:

没有答案