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

使用Conan构建nlohmann_json_schema_validator示例时遇链接错误的技术求助

解决Conan + CMake链接nlohmann_json_schema_validator失败的问题

我之前踩过Conan和CMake集成的类似坑,给你几个可行的解决方案,应该能帮你解决问题:

方案1:修复旧版conan_cmake_run的用法

你最初用的conan_cmake_run是Conan 1.x的旧函数,问题出在BASIC_SETUP默认不会生成CMake目标,而是用${CONAN_LIBS}变量传递依赖,这种方式很容易因为路径或变量传递遗漏出错。修改成目标式的链接方式会更可靠:

cmake_minimum_required(VERSION 3.10)
project(app VERSION 1.0.0 LANGUAGES CXX)
add_executable(${PROJECT_NAME} src/main.cpp)
target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_17)

if(NOT EXISTS "${CMAKE_BINARY_DIR}/conan.cmake")
    message(STATUS "Downloading conan.cmake from https://github.com/conan-io/cmake-conan")
    file(DOWNLOAD "https://raw.githubusercontent.com/conan-io/cmake-conan/master/conan.cmake" "${CMAKE_BINARY_DIR}/conan.cmake")
endif()
include(${CMAKE_BINARY_DIR}/conan.cmake)

# 关键修改:添加TARGETS参数,让Conan生成CMake目标
conan_cmake_run(REQUIRES json-schema-validator/2.1.0 
                BASIC_SETUP TARGETS 
                BUILD missing)
# 改用Conan生成的目标链接,自动处理头文件和库路径
target_link_libraries(${PROJECT_NAME} CONAN_PKG::json-schema-validator)

target_include_directories(${PROJECT_NAME} PUBLIC "src")

这种方式下,CONAN_PKG::json-schema-validator会自动包含依赖的nlohmann_json,不需要额外处理头文件或库路径。

方案2:改用Conan 2.x推荐的现代集成方式

如果你的Conan版本是2.x,更推荐用CMakeDeps和CMakeToolchain生成器,这是官方现在主推的可靠集成方式:

步骤1:创建conanfile.txt(项目根目录)

[requires]
json-schema-validator/2.1.0

[generators]
CMakeDeps
CMakeToolchain

步骤2:修改CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(app VERSION 1.0.0 LANGUAGES CXX)

# 引入Conan生成的工具链文件(必须在project之后,find_package之前)
set(CMAKE_TOOLCHAIN_FILE ${CMAKE_BINARY_DIR}/conan_toolchain.cmake CACHE PATH "Conan toolchain file")

# 用CMake原生的find_package找到依赖
find_package(json-schema-validator REQUIRED)

add_executable(${PROJECT_NAME} src/main.cpp)
target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_17)
# 链接官方定义的目标
target_link_libraries(${PROJECT_NAME} nlohmann_json_schema_validator::nlohmann_json_schema_validator)
target_include_directories(${PROJECT_NAME} PUBLIC "src")

步骤3:构建命令

先在项目根目录运行Conan安装依赖:

conan install . --output-folder=build --build=missing

然后进入build目录运行CMake:

cd build
cmake ..
make

这种方式完全遵循CMake的原生逻辑,Conan会自动生成所有依赖的配置文件,CMake能精准找到头文件和库文件,几乎不会出路径问题。

额外排查点

  1. 检查Conan Profile配置:确保你的Profile设置的编译器、库类型(静态/动态)和项目一致。如果要强制静态库,可以在conan install时添加参数:
    conan install . -s build_type=Release -s compiler=gcc -s compiler.version=11 -s compiler.libcxx=libstdc++11 -s os=Linux -o json-schema-validator:shared=False --build=missing
    
  2. 验证Conan包完整性:运行conan list json-schema-validator/2.1.0:*确认包已正确安装,进入包目录(~/.conan/data/json-schema-validator/2.1.0/_/_/package/xxx/)检查lib和include文件夹是否有内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 13:47:36