You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 14:00:21