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

CMake链接spdlog静态库时配置文件查找报错如何解决

问题解决步骤

错误原因分析

你遇到的两次报错都是spdlog的CMake配置文件路径匹配问题:

  1. 第一次报错是因为CMake默认搜索路径中没有包含你自定义的spdlog安装路径,找不到spdlogConfig.cmake配置文件
  2. 第二次报错是因为你把spdlog_DIR指向了spdlog的源码根目录,这个目录下只有编译生成的临时配置,缺少完整安装后才会生成的spdlogConfigTargets.cmake目标文件

修复步骤

步骤1:确认spdlog编译安装正确

编译spdlog时必须执行安装步骤,不能只完成源码编译:

  • 进入spdlog的build目录,执行以下编译安装命令:
cmake .. -DSPDLOG_BUILD_STATIC=ON -DCMAKE_INSTALL_PREFIX=/home/yaodav/Desktop/dnr_main_repo/lib/external
make -j$(nproc)
make install
  • 安装完成后确认以下路径存在配置文件:/home/yaodav/Desktop/dnr_main_repo/lib/external/lib/cmake/spdlog/spdlogConfig.cmake和spdlogConfigTargets.cmake

步骤2:修改CMakeLists.txt配置

不需要修改原有的find_package逻辑,只需要在find_package(spdlog REQUIRED)之前添加CMAKE前缀路径即可:

# 新增这一行,指定自定义安装的库搜索前缀
set(CMAKE_PREFIX_PATH "/home/yaodav/Desktop/dnr_main_repo/lib/external" ${CMAKE_PREFIX_PATH})

if(NOT TARGET spdlog)
    find_package(spdlog REQUIRED)
endif()

如果要手动指定spdlog_DIR,需要指向配置文件所在的完整路径:

set(spdlog_DIR "/home/yaodav/Desktop/dnr_main_repo/lib/external/lib/cmake/spdlog")

备用方案(不使用config包)

如果不想调整安装配置,也可以手动指定头文件和库路径:

# 指定spdlog头文件路径
include_directories(/home/yaodav/Desktop/dnr_main_repo/lib/external/include)
# 查找spdlog静态库
find_library(SPDLOG_STATIC_LIB NAMES spdlog PATHS /home/yaodav/Desktop/dnr_main_repo/lib/external/lib REQUIRED)
# 链接时替换spdlog::spdlog为${SPDLOG_STATIC_LIB}
target_link_libraries(test_1 PRIVATE ${CONNECTION} ${Boost_LIBRARIES} Threads::Threads pq ${SPDLOG_STATIC_LIB})

内容的提问来源于stack exchange,提问作者yaodav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:48:03