OS X cmake linking stdlibc++, mongodb c++ driver issue
OS X cmake linking stdlibc++, mongodb c++ driver issue
我想在我的项目中使用MongoDB C++驱动程序。我已经下载了源代码并按照随附的建议构建了此驱动程序。当我构建我的项目时,使用此驱动程序,我收到大量链接器错误:
Undefined symbols for architecture x86_64:
"mongo::causedBy(std::__1::basic_string<char, std::__1::char_traits<char>,
std::__1::allocator<char> > const&)", referenced from:
mongo::DBException::addContext(std::__1::basic_string<char,
std::__1::char_traits<char>,
std::__1::allocator<char> > const&)
in main.cpp.o
"mongo::UserException::appendPrefix(std::__1::basic_stringstream<char,
std::__1::char_traits<char>,
std::__1::allocator<char> >&) const",
referenced from:
vtable for mongo::ConnectException in main.cpp.o
"std::string::copy(char*, unsigned long, unsigned long) const", referenced from:
mongo::(anonymous namespace)::SSLManager::password_cb(char*, int, int, void*)
in libmongoclient.a(ssl_manager.o)
"std::string::find(char const*, unsigned long, unsigned long) const",
referenced from:
........
链接 c++ 标准库似乎存在一些问题。没有mongoDB驱动程序相关的代码,一切都很好。造成此类问题的原因是什么,如何解决?我正在使用cmake,操作系统是OS X 10.9.2。
UPD链接器命令也是:
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld"
-demangle -dynamic -arch x86_64 -macosx_version_min 10.9.0 -o steven
-search_paths_first -headerpad_max_install_names CMakeFiles/steven.dir/main.cpp.o
/usr/local/lib/libboost_thread-mt.a /usr/local/lib/libboost_filesystem-mt.a
/usr/local/lib/libboost_system-mt.a /usr/local/lib/libboost_program_options-mt.a
/usr/local/lib/libmongoclient.a /usr/local/opt/openssl/lib/libssl.a
/usr/local/opt/openssl/lib/libcrypto.a -lc++ -lSystem
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/5.1/lib/darwin/libclang_rt.osx.a
最后,我设法解决了这个问题。原因是在编译驱动程序时使用不同版本的 stdlib 和链接了驱动程序库的整个应用程序。我将驱动程序库 scorn build 命令更改为:
scons --prefix=/usr/local --ssl install-mongoclient
--64 --c++11 --libc++ --osx-version-min=10.7
而不是:
scons --prefix=/usr/local --ssl install-mongoclient --64
现在链接器不会产生错误,如果 Mongod 正在运行,简单的教程应用程序甚至可以连接 mongo
另一个有用的信息可能是CMakeLists.txt对于那些使用mongo db c ++驱动程序的项目:
project(proj_name)
cmake_minimum_required(VERSION 2.8)
aux_source_directory(. SRC_LIST)
set (CMAKE_CXX_FLAGS " -Wall -std=c++0x -stdlib=libc++ -v")
add_executable(${PROJECT_NAME} ${SRC_LIST})
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
find_package(Boost COMPONENTS thread filesystem system program_options REQUIRED)
target_link_libraries(proj_name ${Boost_LIBRARIES} /usr/local/lib/libmongoclient.a /usr/local/opt/openssl/lib/libssl.a /usr/local/opt/openssl/lib/libcrypto.a)
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- Mongocxx无法使用SSL连接到mongoDB
- 获取 OID(类型::b_oid)作为 MongoDB C++驱动程序中的字符串
- MongoDB 使用数组中的 OR 条件构建查询
- 使用 C++ 查询 MongoDB 的日期字符串
- MongoDB C++ 驱动程序 - 8 位和 16 位整数?
- 无法使用C++代码向MongoDB进行身份验证
- 将 MongoDB C++ 驱动程序升级到 mongocxx-3.1.2
- Mongodb C驱动程序在Windows上安装失败
- 修改Mongodb源代码以禁用文档的自动生成"_id"字段
- Mongodb C++编译问题
- Mongodb Cxx 驱动程序测试在发布版本中崩溃 [ 在调试中工作正常]
- 在 mongodb c++ 驱动程序中使用声明"not found"
- 将mongocxx连接到mongodb服务器时出错:SSL支持不可用
- MongoDB C 查询文档的子元素
- 编译MongoDB C 11驱动程序的错误
- C++ MongoDB 客户端作为类成员
- 无法从C++代码连接到MongoDB
- 如何在C++中使用MongoDB GeoSpatial Index
- Mongodb C++ API 插入二进制文件(图像)