mongod:符号查找错误:mongod:未定义符号:_ZN5boost6detail13once_epoch_cvE

mongod:符号查找错误:mongod:未定义符号:_ZN5boost6detail13once_epoch_cvE

我在安装 mongodb 时遇到了问题:当我运行 sudo mongod 时,我得到了mongod: symbol lookup error: mongod: undefined symbol: _ZN5boost6detail13once_epoch_cvE

uname -a
Linux xyz 3.2.0-4-686-pae #1 SMP Debian 3.2.65-1+deb7u2 i686 GNU/Linux

which mongod
/usr/bin/mongod

ldd /usr/bin/mongod
    linux-gate.so.1 =>  (0xb76e7000)
    libpcrecpp.so.0 => /usr/lib/i386-linux-gnu/libpcrecpp.so.0 (0xb76b9000)
    libpcre.so.3 => /lib/i386-linux-gnu/libpcre.so.3 (0xb767b000)
    libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb758e000)
    libboost_system.so.1.49.0 => /usr/lib/libboost_system.so.1.49.0 (0xb758a000)
    libboost_thread.so.1.49.0 => /usr/lib/libboost_thread.so.1.49.0 (0xb7565000)
    libboost_filesystem.so.1.49.0 => /usr/lib/libboost_filesystem.so.1.49.0 (0xb7546000)
    libboost_program_options.so.1.49.0 => /usr/lib/libboost_program_options.so.1.49.0 (0xb74de000)
    libm.so.6 => /lib/i386-linux-gnu/i686/cmov/libm.so.6 (0xb74b7000)
    libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb749a000)
    libpthread.so.0 => /lib/i386-linux-gnu/i686/cmov/libpthread.so.0 (0xb7481000)
    libc.so.6 => /lib/i386-linux-gnu/i686/cmov/libc.so.6 (0xb731d000)
    /lib/ld-linux.so.2 (0xb76e8000)
    librt.so.1 => /lib/i386-linux-gnu/i686/cmov/librt.so.1 (0xb7314000)
    libboost_system.so.1.57.0 => /lib/libboost_system.so.1.57.0 (0xb730f000)

我已经重新安装了 libboost 和 mongodb,但没有成功。知道发生了什么事吗?

巴西/

答案1

首先,使用命令

$ echo _ZN5boost6detail13once_epoch_cvE|c++filt
boost::detail::once_epoch_cv                                                   

我们可以看到,您的 boost 库缺少符号boost::detail::once_epoch_cv。在大多数情况下,此类神秘的缺失符号来自 c++ 命名空间/类名,可以使用该c++filt工具(gcc/g++ 包的一部分)轻松翻译它们。

once_epoch_cv因此,您的 boost 库的命名空间中没有该方法detail。通过 Google 搜索,我们可以在此处找到此信息,至少 boost-1.47 包含此符号。您的 ldd 输出表明您正在使用较新的 boost 版本 (1.49)。

我认为,您实际安装的 boost 和您为之编译的 mongodb 可执行文件之间存在这种不兼容性。我的建议是从源代码重新编译该 mongodb,或者消除这种不兼容性的原因(可能是使用了一些非官方/不兼容的存储库)。

相关内容