首页 > 解决方案 > 无法使用带有 CMake 的 OpenCV 编译程序

问题描述

在安装opencv和使用 vcpkg 并通过必要的步骤将其包含在我的项目中之后,除了指令opencv[contrib]之外,我无法编译任何东西。#include我已经尝试过使用我在 Visual Studio 上使用 CMake 安装 OpenCV 的教程中可以找到的大部分内容。

最小(非)工作示例:

MWE.cc

#include <opencv2/opencv.hpp>

int main()
{
    cv::namedWindow("test", cv::WINDOW_AUTOSIZE);
    return 0;
}

CMakeLists.txt

cmake_minimum_required (VERSION 3.8)

project ("MWE")

# Add source to this project's executable.
add_executable (MWE "MWE.cc")

find_package (OpenCV REQUIRED)
target_link_libraries (MWE PRIVATE ${OpenCV_LIBS})

CMake 工具链文件选项在CMakeSettings.jsonD:\vcpkg\scripts\buildsystems\vcpkg.cmake

编译器输出

>------ Build All started: Project: MWE, Configuration: x64-Debug (default) ------
  [1/2] Building CXX object CMakeFiles\MWE.dir\MWE.cc.obj
  [2/2] Linking CXX executable MWE.exe
  FAILED: MWE.exe 
  cmd.exe /C "cd . && "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" -E vs_link_exe --intdir=CMakeFiles\MWE.dir --rc="D:\Windows Kits\10\bin\10.0.18362.0\x86\rc.exe" --mt="D:\Windows Kits\10\bin\10.0.18362.0\x86\mt.exe" --manifests  -- C:\PROGRA~2\MICROS~3\2019\COMMUN~1\VC\Tools\MSVC\1428~1.293\bin\Hostx86\x64\link.exe /nologo CMakeFiles\MWE.dir\MWE.cc.obj  /out:MWE.exe /implib:MWE.lib /pdb:MWE.pdb /version:0.0 /machine:x64 /debug /INCREMENTAL /subsystem:console  D:\vcpkg\installed\x64-windows\debug\lib\SDL2d.lib  D:\vcpkg\installed\x64-windows\debug\lib\manual-link\SDL2maind.lib  user32.lib  gdi32.lib  winmm.lib  imm32.lib  ole32.lib  oleaut32.lib  version.lib  uuid.lib  advapi32.lib  setupapi.lib  shell32.lib  dinput8.lib  kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib && cmd.exe /C "cd /D "D:\MWE\out\build\x64-Debug (default)" && C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noprofile -executionpolicy Bypass -file D:/vcpkg/scripts/buildsystems/msbuild/applocal.ps1 -targetBinary "D:/MWE/out/build/x64-Debug (default)/MWE.exe" -installedDir D:/vcpkg/installed/x64-windows/debug/bin -OutVariable out""
  LINK Pass 1: command "C:\PROGRA~2\MICROS~3\2019\COMMUN~1\VC\Tools\MSVC\1428~1.293\bin\Hostx86\x64\link.exe /nologo CMakeFiles\MWE.dir\MWE.cc.obj /out:MWE.exe /implib:MWE.lib /pdb:MWE.pdb /version:0.0 /machine:x64 /debug /INCREMENTAL /subsystem:console D:\vcpkg\installed\x64-windows\debug\lib\SDL2d.lib D:\vcpkg\installed\x64-windows\debug\lib\manual-link\SDL2maind.lib user32.lib gdi32.lib winmm.lib imm32.lib ole32.lib oleaut32.lib version.lib uuid.lib advapi32.lib setupapi.lib shell32.lib dinput8.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib /MANIFEST /MANIFESTFILE:CMakeFiles\MWE.dir/intermediate.manifest CMakeFiles\MWE.dir/manifest.res" failed (exit code 1120) with the following output:
D:\MWE\out\build\x64-Debug (default)\MWE.cc.obj : error LNK2019: unresolved external symbol "void __cdecl cv::namedWindow(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int)" (?namedWindow@cv@@YAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z) referenced in function main
D:\MWE\out\build\x64-Debug (default)\MWE.exe : fatal error LNK1120: 1 unresolved externals
  ninja: build stopped: subcommand failed.

Build All failed.

我对 C++(C 语言不错)和 Windows 编程有点陌生,所以如果这很简单,请原谅我。

标签: c++visual-studioopencvcmakevcpkg

解决方案


推荐阅读