Apple Silicon Mac使用MongoDB C++ Driver编译报错:core/optional.hpp未找到
解决Apple Silicon Mac上MongoDB C++ Driver编译找不到core/optional.hpp的问题
问题原因
你手动指定include路径的方式没有正确引入MongoDB C++ Driver依赖的所有头文件目录,core/optional.hpp属于驱动依赖的第三方组件(或内部stdx兼容层),不在你添加的路径里。正确的做法是使用驱动提供的CMake配置模块自动处理依赖,而非手动设置include路径。
解决方案
修改你的CMakeLists.txt,改用find_package导入mongocxx和bsoncxx的配置,并链接对应的目标:
cmake_minimum_required(VERSION 3.27) project(server) set(CMAKE_CXX_STANDARD 17) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # 针对Apple Silicon的brew路径,确保CMake能找到驱动的配置文件 set(CMAKE_PREFIX_PATH "/opt/homebrew/lib/cmake") # 导入mongocxx和bsoncxx find_package(mongocxx REQUIRED) find_package(bsoncxx REQUIRED) file(GLOB sources "${PROJECT_SOURCE_DIR}/*.cpp") add_executable(${PROJECT_NAME} ${sources}) # 链接驱动目标,自动处理include路径和链接库 target_link_libraries(${PROJECT_NAME} PRIVATE mongocxx::mongocxx PRIVATE bsoncxx::bsoncxx PRIVATE "${PROJECT_SOURCE_DIR}/dependencies/Crow/include/" ) # 如果使用C++17及以上,可以开启使用std::optional替代驱动的stdx实现(可选) target_compile_definitions(${PROJECT_NAME} PRIVATE MONGOCXX_USE_STD_OPTIONAL)
额外说明
- 如果你是源码编译安装的驱动,需要把驱动的安装目录(比如
/usr/local或自定义路径)添加到CMAKE_PREFIX_PATH中,确保find_package能找到mongocxx-config.cmake和bsoncxx-config.cmake文件。 - 手动指定include路径容易遗漏依赖目录,官方推荐用
find_package的方式集成,能自动处理所有依赖项、编译定义和链接库。 - 开启
MONGOCXX_USE_STD_OPTIONAL后,驱动会使用C++17标准库的std::optional,避免依赖内部的core/optional.hpp实现,也能直接解决当前的头文件找不到问题。
内容的提问来源于stack exchange,提问作者Trentwt
相关产品推荐
相关产品推荐

