通过 vcpkg 安装软件包导致“opencv2/opencv.hpp:没有这样的文件或目录”错误

问题描述 投票:0回答:2

我已经使用 vcpkg 安装了 vcpkg 和 opencv 来尝试在 c++ 中导入 opencv 库,但我不断收到以下错误:

main.cpp:2:10: fatal error: opencv2/opencv.hpp: No such file or directory
    2 | #include <opencv2/opencv.hpp>

这是我简单的main.cpp:

#include <iostream>
#include <opencv2/opencv.hpp>       //I have also tried using "" instead

using namespace cv;                 //I have tried not using this line

int main(int, char**) {
    std::cout << "Hello, world!\n";
}

我已经测试过这是否是opencv的问题,但是当我安装并尝试通过vcpkg导入booster库时,同样的问题仍然存在。

我有一个Windows 10,我目前使用VScode作为我的主要编辑器,尽管我不认为这是VScode的问题,因为无论是在atom、vscode还是Windows终端、cygwin中使用run包,或 powershell 都会弹出相同的错误。

我尝试了很多方法,包括卸载并重新安装 vcpkg、添加库和 bin 文件到系统环境变量中的路径、重新安装 C: 驱动器而不是 D: 驱动器中的所有内容、使用 cmake 甚至更改 #include 语句到以下变化:

#include <opencv2>
#include <opencv>

但是,我注意到当我使用以下导入语句时:

#include <C:\Users\nick-\DEV\opencv\build\include\opencv2\opencv.hpp>

我收到此错误:

C:\Users\nick-\DEV\opencv\build\include\opencv2\opencv.hpp:48:10: fatal error: opencv2/opencv_modules.hpp: No such file or directory
   48 | #include "opencv2/opencv_modules.hpp"

源自opencv库的文件之一。

我使用 vcpkg 因为我之前尝试过使用 cmake 但问题没有解决,另一个 StackOverflow 链接位于 [此处][1],以防它有所帮助。 (我尝试了建议的方法,找到了 opencv 库并将其移动到正确的地址,但没有帮助)

编辑:根据@Alan Birtles的建议,最小的可重现示例, 这些是我所做的步骤:

  • 通过 git 克隆 [vcpkg repo][2] 安装 vcpkg
  • 运行引导命令(.cpkg ootstrap-vcpkg.bat)
  • 通过vcpkg安装opencv(vcpkg install opencv)
  • 全局集成 vcpkg 软件包(vcpkg 集成安装)
  • 创建了一个主文件(main.cpp),如上面所示,我对其进行了轻微的编辑以使其最小化。
  • 然后我编译main.cpp(g++ main.cpp -o main)并得到错误 然后我尝试了上述故障排除步骤(以及大量我不记得的其他步骤)并继续解决手头的问题。

编辑:尝试重新合并cmake 按照@Genjutsu在评论中的建议,我已经完成了以下步骤来重新设置cmake并让它工作(它还没有工作)

  • 在 vscode 上安装了 cmake、cmake 工具和 cmake 集成扩展
  • 将“cmake configure”作为可执行文件运行
  • 在我的 CMakeLists.txt 文件中添加了几行,如下所示
cmake_minimum_required(VERSION 3.0.0)
project(fpc VERSION 0.1.0)

include(CTest)
enable_testing()

set(CMAKE_TOOLCHAIN_FILE "C:/Users/nick-/DEV/vcpkg/scripts/buildsystems/vcpkg.cmake")
set(CMAKE_PREFIX_PATH "C:/Users/nick-/DEV/vcpkg/installed/x64-windows")

find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable(fpc main.cpp)

target_link_libraries(fpc ${OpenCV_LIBS})

message("OpenCV_INCLUDE_DIRS: " ${OpenCV_INCLUDE_DIRS})
message("OpenCV_LIBS: " ${OpenCV_LIBS})

set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)

这给了我以下输出:

[main] Configuring folder: floorplan pathfinder cpp 
[cmake] Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.19043.
[cmake] OpenCV_INCLUDE_DIRS: C:/Users/nick-/DEV/opencv/build/include
[cmake] OpenCV_LIBS: opencv_calib3dopencv_coreopencv_dnnopencv_features2dopencv_flannopencv_gapiopencv_highguiopencv_imgcodecsopencv_imgprocopencv_mlopencv_objdetectopencv_photoopencv_stitchingopencv_videoopencv_videoioopencv_world
[cmake] Configuring done
[cmake] Generating done
  • 最后,我执行了“Visual Studio Code with CMake Tools”下的建议操作,将 vcpkg 与 cmake 结合使用,并将我的工作场所的 settings.json 设置为:
{
    "cmake.configureSettings": {
        "CMAKE_TOOLCHAIN_FILE": "D:/Program Files/vcpkg/scripts/buildsystems/vcpkg.cmake"
    }
}

编辑:添加了清单文件(还编辑了cmake文件) 因此,我尽我所能添加了一个 vcpkg.json 清单文件,如下所示。并使用上面反映的更改修改了我的 CMakeLists.txt 文件。

{
    "name": "example",
    "version-string": "0.0.1",
    "dependencies": [
      "OpenCV"
    ]
  }
c++ import include libraries vcpkg
2个回答
0
投票

简单地说:
a) VS Code 不受 vcpkg 集成安装的影响,只有 MSBuild 是...
b) 设置

CMAKE_TOOLCHAIN_FILE
仅在第一次
project()
调用
之前有效 c) 如果已经配置了 cmake 缓存,则通过
CMAKE_TOOLCHAIN_FILE
或其他方式在
project()
之前设置
cmake.configureSettings
不起作用。 d) 不要修改
CMAKE_PREFIX_PATH

因此,从没有任何缓存的干净 cmake 构建开始:以任何您想要的方式在

CMAKE_TOOLCHAIN_FILE
之前设置
project()
并且它可以工作。您可能还需要设置
VCPKG_TARGET_TRIPLET
。 (使用
#include <opencv2/opencv.hpp>
看起来不错)


0
投票

临时解决方案:

  1. 运行命令

    vcpkg list opencv
    ,你会看到这样的: vcpkg list opencv

  2. 注意opencv4之后的字符,例如图中的“x86-windows”。

  3. 进入vcpkg目录。找到并进入目录“ cpkg\installed\x86-windows\include\opencv4”。

  4. 将“ cpkg\installed\x86-windows\include\opencv4\opencv2”目录复制到“cpkg\installed\x86-windows\include”

  5. 仅此而已。

© www.soinside.com 2019 - 2024. All rights reserved.