c++ - SIGSEGV (Segmentation fault) when link boost-thread and boost-regex via cmake -
i try compile , run example of mongo-cxx-driver. requires linking boost-system, boost-thread , boost-regex. when compile commad line:
g++ simple_client_demo.cpp -i/home/ssi/mongo-client-install/include -l/home/ssi/mongo-client-install/lib -lmongoclient -lboost_system -lboost_thread -lboost_regex
all well. when try compile cmake, signal: sigsegv (segmentation fault)
in /usr/include/c++/4.8/functional(2030 line _m_manager(_m_functor, _m_functor, __destroy_functor);
if matter).
part of cmakelist.txt, link boost:
cmake_minimum_required(version 3.2) project(test_mongo_c_driver) set(cmake_cxx_flags "${cmake_cxx_flags} -std=c++11") include_directories("/home/ssi/mongo-client-install/include") link_directories("/home/ssi/mongo-client-install/lib") #link_directories("/usr/lib/x86_64-linux-gnu/") #add_library(mongoclient) set(boost_use_static_libs off) set(boost_use_multithreaded off) set(boost_use_static_runtime off) find_package(boost 1.54.0 required components thread system regex) if(boost_found) include_directories(${boost_include_dirs}) endif() set(source_files simple_client_demo.cpp # tutor2.cpp ) add_executable(test_mongo_c_driver ${source_files}) target_link_libraries(test_mongo_c_driver mongoclient ${boost_libraries})
ldd a.out
(compile g++
command):
linux-vdso.so.1 => (0x00007fffd41b5000) libboost_system.so.1.54.0 => /usr/lib/x86_64-linux-gnu/libboost_system.so.1.54.0 (0x00007f236fda7000) libboost_thread.so.1.54.0 => /usr/lib/x86_64-linux-gnu/libboost_thread.so.1.54.0 (0x00007f236fb91000) libboost_regex.so.1.54.0 => /usr/lib/x86_64-linux-gnu/libboost_regex.so.1.54.0 (0x00007f236f889000) libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f236f585000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f236f27f000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f236f068000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f236eca3000) /lib64/ld-linux-x86-64.so.2 (0x00007f236ffd2000) librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f236ea9b000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f236e87c000) libicuuc.so.52 => /usr/lib/x86_64-linux-gnu/libicuuc.so.52 (0x00007f236e503000) libicui18n.so.52 => /usr/lib/x86_64-linux-gnu/libicui18n.so.52 (0x00007f236e0fc000) libicudata.so.52 => /usr/lib/x86_64-linux-gnu/libicudata.so.52 (0x00007f236c88e000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f236c68a000)
ldd test_mongo_c_driver
(compile cmake):
linux-vdso.so.1 => (0x00007ffff7163000) libboost_thread.so.1.54.0 => /usr/lib/x86_64-linux-gnu/libboost_thread.so.1.54.0 (0x00007fc61ea28000) libboost_system.so.1.54.0 => /usr/lib/x86_64-linux-gnu/libboost_system.so.1.54.0 (0x00007fc61e823000) libboost_regex.so.1.54.0 => /usr/lib/x86_64-linux-gnu/libboost_regex.so.1.54.0 (0x00007fc61e51c000) libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fc61e218000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc61df11000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fc61dcfb000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc61d936000) /lib64/ld-linux-x86-64.so.2 (0x00007fc61ec65000) librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fc61d72d000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc61d50f000) libicuuc.so.52 => /usr/lib/x86_64-linux-gnu/libicuuc.so.52 (0x00007fc61d196000) libicui18n.so.52 => /usr/lib/x86_64-linux-gnu/libicui18n.so.52 (0x00007fc61cd8e000) libicudata.so.52 => /usr/lib/x86_64-linux-gnu/libicudata.so.52 (0x00007fc61b521000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fc61b31c000)
this simple_client_demo.cpp:
#include "mongo/client/dbclient.h" // mongo c++ driver #include <iostream> using namespace std; using namespace mongo; int main(int argc, char *argv[]) { if (argc > 2) { std::cout << "usage: " << argv[0] << " [mongodb_uri]" << std::endl; return exit_failure; } mongo::client::globalinstance instance; if (!instance.initialized()) { std::cout << "failed initialize client driver: " << instance.status() << std::endl; return exit_failure; } std::string uri = argc == 2 ? argv[1] : "mongodb://meowtom.ru:27017"; std::string errmsg; connectionstring cs = connectionstring::parse(uri, errmsg); if (!cs.isvalid()) { std::cout << "error parsing connection string " << uri << ": " << errmsg << std::endl; return exit_failure; } boost::scoped_ptr<dbclientbase> conn(cs.connect(errmsg)); if (!conn) { cout << "couldn't connect : " << errmsg << endl; return exit_failure; } try { unsigned long long count = conn->count("test.users"); cout << "count of exiting documents in collection test.foo : " << count << endl; conn->remove("test.foo", bsonobj()); bsonobj o = bson("hello" << "world"); conn->insert("test.users", o); query query; bsonobj ret = conn->findone("test.users", query); std::cout << ret.tostring() << '\n'; string e = conn->getlasterror(); if (!e.empty()) { cout << "insert #1 failed: " << e << endl; } // make index unique key constraint conn->createindex("test.foo", indexspec().addkeys(bson("hello" << 1)).unique()); try { conn->insert("test.foo", o); // cause dup key error on "hello" field } catch (const operationexception &) { // duplicate key error } // cout << "we expect dup key error here:" << endl; // cout << " " << conn->getlasterrordetailed().tostring() << endl; } catch (dbexception &e) { cout << "caught dbexception " << e.tostring() << endl; return 1; } return 0; }
output make verbose=1
:
/usr/local/bin/cmake -h/home/ssi/cppproj/test-mongo-c-driver -b/home/ssi/cppproj/test-mongo-c-driver --check-build-system cmakefiles/makefile.cmake 0 /usr/local/bin/cmake -e cmake_progress_start /home/ssi/cppproj/test-mongo-c-driver/cmakefiles /home/ssi/cppproj/test-mongo-c-driver/cmakefiles/progress.marks make -f cmakefiles/makefile2 make[1]: entering directory `/home/ssi/cppproj/test-mongo-c-driver' make -f cmakefiles/test_mongo_c_driver.dir/build.make cmakefiles/test_mongo_c_driver.dir/depend make[2]: entering directory `/home/ssi/cppproj/test-mongo-c-driver' cd /home/ssi/cppproj/test-mongo-c-driver && /usr/local/bin/cmake -e cmake_depends "unix makefiles" /home/ssi/cppproj/test-mongo-c-driver /home/ssi/cppproj/test-mongo-c-driver /home/ssi/cppproj/test-mongo-c-driver /home/ssi/cppproj/test-mongo-c-driver /home/ssi/cppproj/test-mongo-c-driver/cmakefiles/test_mongo_c_driver.dir/dependinfo.cmake --color= make[2]: leaving directory `/home/ssi/cppproj/test-mongo-c-driver' make -f cmakefiles/test_mongo_c_driver.dir/build.make cmakefiles/test_mongo_c_driver.dir/build make[2]: entering directory `/home/ssi/cppproj/test-mongo-c-driver' make[2]: nothing done `cmakefiles/test_mongo_c_driver.dir/build'. make[2]: leaving directory `/home/ssi/cppproj/test-mongo-c-driver' /usr/local/bin/cmake -e cmake_progress_report /home/ssi/cppproj/test-mongo-c-driver/cmakefiles 1 [100%] built target test_mongo_c_driver make[1]: leaving directory `/home/ssi/cppproj/test-mongo-c-driver' /usr/local/bin/cmake -e cmake_progress_start /home/ssi/cppproj/test-mongo-c-driver/cmakefiles 0
Comments
Post a Comment