使用Conan和CMake链接Boost::Filesystem时遇LNK2019错误,求解决
解决Conan+CMake链接Boost::Filesystem的LNK2019错误
核心问题分析
- 混用Conan生成配置与原生CMake
find_package,导致库路径/版本不匹配 - 静态库与动态库的编译宏定义冲突(
BOOST_SYSTEM_DYN_LINKvsBoost_USE_STATIC_LIBS ON) - Conan配置的
build_type=Release与CMake构建的Debug模式不匹配 - 链接变量名错误(
${BOOST_LIBRARIES}应为${Boost_LIBRARIES})
修复步骤
1. 统一依赖管理方式,移除原生Boost查找
修改CMakeLists.txt,直接使用Conan生成的依赖信息,无需手动调用find_package(Boost):
cmake_minimum_required(VERSION 3.2) project(scanner CXX) set(CMAKE_CXX_STANDARD 17) set(CONAN_DISABLE_CHECK_COMPILER "1") set(SOURCES src/main.cpp) if(EXISTS ${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) conan_basic_setup() else() message(FATAL_ERROR "请先运行conan install生成conanbuildinfo.cmake") endif() add_executable(${PROJECT_NAME} ${SOURCES}) target_link_libraries(${PROJECT_NAME} ${CONAN_LIBS})
2. 统一库类型与宏定义
- 静态库方案:删除源代码第一行的
#define BOOST_SYSTEM_DYN_LINK,确保编译时链接静态库 - 动态库方案:在
conanfile.txt的[options]中添加boost:shared=True,保留源代码中的BOOST_SYSTEM_DYN_LINK定义
3. 对齐构建类型
修改Conan配置文件(win_msvc_2019_x86_64),将build_type改为Debug,匹配CMake的Debug构建:
[settings] os=Windows os_build=Windows arch=x86_64 arch_build=x86_64 compiler=Visual Studio compiler.version=17 build_type=Debug [options] [conf] [build_requires] [env]
4. 重新执行Conan安装与构建
删除现有build目录,重新运行Conan安装命令,再执行CMake构建:
conan install -pr:b win_msvc_2019_x86_64 -pr:h win_msvc_2019_x86_64 -if "${command:cmake.buildDirectory}" "${workspaceFolder}" --build missing
内容的提问来源于stack exchange,提问作者Dmitriy Bobrov
相关产品推荐
相关产品推荐

