我从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
我之前从未遇到过这种问题。 怎么解决?
答案 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