MongoDB 2.4 C ++驱动程序导致链接错误

时间:2013-04-23 01:23:16

标签: mongodb

我从http://dl.mongodb.org/dl/cxx-driver下载了最新的代码,并将其编译为Ubuntu 12.04&上的静态库。 12.10。 我的GCC是4.7,并使用CMake作为构建系统。 Boost库:Ubuntu 12.04上的1.48,Ubuntu 12.10上的1.49。

然后,我的两个项目使用mongodb客户端库成功编译,但第三个项目下面出现链接错误:

Linking CXX executable cml_cloud

/usr/lib/gcc/x86_64-linux-gnu/4.7 /../../../../ lib / libmongoclient.a(log.o):在函数mongo::LoggingManager::start(std::string const&, bool)': log.cpp:(.text._ZN5mongo14LoggingManager5startERKSsb[_ZN5mongo14LoggingManager5startERKSsb]+0x4c): undefined reference to中: :filesystem3 :: detail :: status(boost :: filesystem3 :: path const&,boost :: system :: error_code *)' log.cpp :(。text._ZN5mongo14LoggingManager5startERKSsb [_ZN5mongo14LoggingManager5startERKSsb] + 0x86):未定义引用boost::filesystem3::detail::status(boost::filesystem3::path const&, boost::system::error_code*)' log.cpp:(.text._ZN5mongo14LoggingManager5startERKSsb[_ZN5mongo14LoggingManager5startERKSsb]+0xb8): undefined reference to boost :: filesystem3 :: detail :: status(boost :: filesystem3 :: path const&,boost :: system: :错误代码*)' collect2:错误:ld返回1退出状态 make [2]: * [bin / cml_cloud]错误1 make [1]:* [bin / CMakeFiles / cml_cloud.dir / all]错误2 make: * [all]错误2

我之前从未遇到过这种问题。 怎么解决?

2 个答案:

答案 0 :(得分:0)

我修好了。这与mongodb库无关,我只是改变了CMakeLists.txt中target_link_libraries的顺序。

原始陈述是:

target_link_libraries( cml_cloud ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES} cppcms mongoclient booster loki cryptopp)

现在看起来像:

target_link_libraries( cml_cloud ${CMAKE_THREAD_LIBS_INIT} cppcms mongoclient booster loki cryptopp ${Boost_LIBRARIES})

我现在很开心,但有人知道为什么会纠正这个问题吗?

答案 1 :(得分:0)

当然,链接顺序很重要就是这么简单。最基本和最重要的库必须上升,那些具有很多依赖性的库必须停止运行。

请在此处阅读:http://www.network-theory.co.uk/docs/gccintro/gccintro_18.html