通过Conan安装OpenCV后出现链接错误的技术求助
Conan + OpenCV/Qt 链接错误解决方案(Windows 10 + MSVC)
问题场景
在Windows 10环境下使用Conan集成OpenCV 4.5.5时出现LNK2019未解析外部符号错误,集成Qt时也遇到类似问题,但Zlib等小型库可正常编译运行。
环境与配置
默认Conan配置文件
[settings] arch=x86_64 build_type=Release compiler=msvc compiler.cppstd=20 compiler.runtime=dynamic compiler.version=193 os=Windows
项目文件
conanfile.txt
[requires] opencv/4.5.5 [generators] CMakeDeps CMakeToolchain
CMakeLists.txt
cmake_minimum_required(VERSION 3.22) project(minimal LANGUAGES CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) find_package(OpenCV REQUIRED VERSION 4.5.5) add_executable(prog main.cpp) target_link_libraries(prog PRIVATE ${OpenCV_LIBS} ) target_include_directories(prog PRIVATE ${OpenCV_INCLUDE_DIRS} )
main.cpp
#include <opencv2/opencv.hpp> int main() { cv::Mat mat{}; return 0; }
执行命令
conan install . --output-folder=build --build=missing cmake -B build --preset conan-default cmake --build --preset conan-release
错误信息
main.obj : error LNK2019: unresolved external symbol "public: __cdecl cv::Mat::Mat(void)" (??0Mat@cv@@QEAA@XZ) referenced in function main [C:\Users\redbox\Desktop\projects\opencvexample\build\prog.vcxproj] main.obj : error LNK2019: unresolved external symbol "public: __cdecl cv::Mat::~Mat(void)" (??1Mat@cv@@QEAA@XZ) referenced in function main [C:\Users\redbox\Desktop\projects\opencvexample\build\prog.vcxproj] C:\Users\redbox\Desktop\projects\opencvexample\build\Release\prog.exe : fatal error LNK1120: 2 unresolved externals [C:\Users\desktop\Desktop\projects\opencvexample\build\prog.vcxproj]
解决方案
1. 切换现代CMake链接方式(推荐)
放弃${OpenCV_LIBS}这种旧写法,直接使用Conan生成的目标库,这类目标会自动处理依赖、包含目录和编译选项:
修改CMakeLists.txt中的链接部分:
# 替换原有的target_link_libraries和target_include_directories target_link_libraries(prog PRIVATE OpenCV::opencv_core )
无需手动设置target_include_directories,OpenCV::opencv_core已包含必要的头文件路径。
2. 强制配置一致性
确保Conan安装的库与项目编译参数完全匹配:
- 执行
conan inspect opencv/4.5.5查看库的默认编译设置,确认compiler.runtime、compiler.cppstd等参数和本地配置一致。 - 若不一致,安装时显式指定参数:
conan install . --output-folder=build --build=missing -s compiler.runtime=dynamic -s compiler.cppstd=20
3. 清理缓存重新安装
Conan缓存中可能存在不匹配的库版本,清理后重新构建:
conan remove opencv/4.5.5 -f conan install . --output-folder=build --build=missing
4. 检查CMake预设加载
确认CMake正确加载Conan生成的预设:
- 查看
build/CMakePresets.json,确认conan-default和conan-release中的编译参数与配置一致。 - 若预设异常,删除
build目录后重新执行conan install和cmake命令。
内容的提问来源于stack exchange,提问作者RedBox
相关产品推荐
相关产品推荐

