Я установил драйвер mongocxx, как показано http://mongodb.github.io/mongo-cxx-driver/mongocxx-v3/installation/ и
когда я тестирую драйвер, все выглядит нормально, но если немного изменить код, я получаю ошибку при загрузке общих библиотек: libbsoncxx.so._noabi: не могу открыть файл общего объекта: нет такого файла или каталога .
Код:
CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
if(POLICY CMP0025)
cmake_policy(SET CMP0025 NEW)
endif()
project(test_mongodb LANGUAGES C CXX)
if(NOT DEFINED CMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 11)
endif()
set(CMAKE_PREFIX_PATH CMAKE_PREFIX_PATH "~/opt/mongo-cxx-driver/install")
set(CMAKE_CXX_EXTENSIONS OFF)
if (NOT CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Werror")
endif()
add_executable(test_mongodb main.cpp)
find_package(libmongocxx REQUIRED)
target_include_directories(test_mongodb
PRIVATE ${LIBMONGOCXX_INCLUDE_DIRS}
)
target_link_libraries(test_mongodb
PRIVATE ${LIBMONGOCXX_LIBRARIES}
)
target_compile_definitions(test_mongodb
PRIVATE ${LIBMONGOCXX_DEFINITIONS}
)
add_custom_target(run
COMMAND test_mongodb
DEPENDS test_mongodb
WORKING_DIRECTORY ${CMAKE_PROJECT_DIR}
)
list(FIND LIBMONGOCXX_DEFINITIONS "BSONCXX_STATIC" LIST_IDX)
if (${LIST_IDX} GREATER -1)
message(FATAL_ERROR "Expected BSONCXX_STATIC to not be defined")
endif()
list(FIND LIBMONGOCXX_DEFINITIONS "MONGOCXX_STATIC" LIST_IDX)
if (${LIST_IDX} GREATER -1)
message(FATAL_ERROR "Expected MONGOCXX_STATIC to not be defined")
endif()
main.cpp
#include <iostream>
#include <bsoncxx/builder/stream/document.hpp>
#include <bsoncxx/json.hpp>
#include <mongocxx/client.hpp>
#include <mongocxx/instance.hpp>
#include <mongocxx/cursor.hpp>
int main(int argc, char* argv[]) {
using bsoncxx::builder::basic::kvp;
using bsoncxx::builder::basic::make_document;
mongocxx::instance inst;
try {
const auto uri = mongocxx::uri{(argc >= 2) ? argv[1] : mongocxx::uri::k_default_uri};
auto client = mongocxx::client{uri};
auto admin = client["admin"];
auto result = admin.run_command(make_document(kvp("isMaster", 1)));
std::cout << bsoncxx::to_json(result) << std::endl;
return EXIT_SUCCESS;
} catch (const std::exception& xcp) {
std::cout << "connection failed: " << xcp.what() << std::endl;
return EXIT_FAILURE;
}
}
Если я удаляю auto result = admin.run_command(make_document(kvp("isMaster", 1)));
из кода, я получаю ошибку при загрузке общих библиотек: libbsoncxx.so._noabi , если не работает нормально. Есть идеи, почему он так себя ведет?
Ubuntu 18.04
сс 7.3.0,
с ++ 7.3.0,
CMake 3.11.3