c++mongodbcmakemongo-cxx-driver

Mongo CXX Driver: 'core/optional.hpp' file not found


Did anybody have any luck using the official MongoDB C++ driver on Mac OS X? I'm using an Apple Silicon Mac and I've tried including both the library installed via brew install mongo-cxx-driver and one built from the release tarball, but both versions give me the same issue when running cmake --build build on my project:

[ 50%] Building CXX object CMakeFiles/server.dir/main.cpp.o
In file included from /Users/trentwt/Development/CPPRestAPI/main.cpp:3:
In file included from /opt/homebrew/include/mongocxx/v_noabi/mongocxx/client.hpp:19:
In file included from /opt/homebrew/include/mongocxx/v_noabi/mongocxx/client_session.hpp:20:
In file included from /opt/homebrew/include/bsoncxx/v_noabi/bsoncxx/document/view.hpp:21:
In file included from /opt/homebrew/include/bsoncxx/v_noabi/bsoncxx/document/element.hpp:20:
/opt/homebrew/include/bsoncxx/v_noabi/bsoncxx/stdx/optional.hpp:21:10: fatal error: 'core/optional.hpp' file not found
#include <core/optional.hpp>
         ^~~~~~~~~~~~~~~~~~~
1 error generated.
make[2]: *** [CMakeFiles/server.dir/main.cpp.o] Error 1
make[1]: *** [CMakeFiles/server.dir/all] Error 2
make: *** [all] Error 2

I assume it wants to use boost/optional.hpp, but it's trying core/optional.hpp instead; I don't know. I'm including my CMakeLists.txt here:

cmake_minimum_required(VERSION 3.27)

project(server)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

file(GLOB sources "${PROJECT_SOURCE_DIR}/*.cpp")

add_executable(${PROJECT_NAME} ${sources})

target_include_directories(${PROJECT_NAME} 
  PUBLIC "/opt/homebrew/include"
  PUBLIC "/opt/homebrew/include/mongocxx/v_noabi/"
  PUBLIC "/opt/homebrew/include/bsoncxx/v_noabi/"
  PUBLIC "${PROJECT_SOURCE_DIR}/dependencies/Crow/include/"
)

Any help is appreciated.


Solution

  • So as it turns out, it wasn't referencing boost; it was referencing a package mnmlstc/core I cloned the repository for that library, placed it into my dependencies folder, and added it to target_include_directories in the CMakeLists.txt, and it seemed to do the trick. I also had to reference the libraries for the linker.

    On the off-chance this may help somebody, I'll paste the CMakeLists.txt file here:

    cmake_minimum_required(VERSION 3.27)
    
    project(server)
    
    set(CMAKE_CXX_STANDARD 17)
    set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
    
    file(GLOB SOURCES "${PROJECT_SOURCE_DIR}/*.cpp")
    
    add_executable(${PROJECT_NAME} ${SOURCES})
    
    find_package(Boost REQUIRED)
    
    target_include_directories(${PROJECT_NAME} 
      PUBLIC ${Boost_INCLUDE_DIR}
      PUBLIC "${PROJECT_SOURCE_DIR}/dependencies/mongo-cxx/include/mongocxx/v_noabi"
      PUBLIC "${PROJECT_SOURCE_DIR}/dependencies/mongo-cxx/include/bsoncxx/v_noabi"
      PUBLIC "${PROJECT_SOURCE_DIR}/dependencies/core/include"
      PUBLIC "${PROJECT_SOURCE_DIR}/dependencies/Crow/include"
    )
    
    target_link_libraries(${PROJECT_NAME} 
      PRIVATE "${PROJECT_SOURCE_DIR}/dependencies/mongo-cxx/lib/libmongocxx.dylib"
      PRIVATE "${PROJECT_SOURCE_DIR}/dependencies/mongo-cxx/lib/libbsoncxx.dylib"
    )
    

    Ideally I would use find_package, but I figure this is not meant to be released.