我已经使用 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的建议,最小的可重现示例, 这些是我所做的步骤:
编辑:尝试重新合并cmake 按照@Genjutsu在评论中的建议,我已经完成了以下步骤来重新设置cmake并让它工作(它还没有工作)
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
{
"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"
]
}
简单地说:
a) VS Code 不受 vcpkg 集成安装的影响,只有 MSBuild 是...
b) 设置
CMAKE_TOOLCHAIN_FILE
仅在第一次 project()
调用CMAKE_TOOLCHAIN_FILE
或其他方式在 project()
之前设置 cmake.configureSettings
不起作用。
d) 不要修改 CMAKE_PREFIX_PATH
因此,从没有任何缓存的干净 cmake 构建开始:以任何您想要的方式在
CMAKE_TOOLCHAIN_FILE
之前设置 project()
并且它可以工作。您可能还需要设置 VCPKG_TARGET_TRIPLET
。
(使用 #include <opencv2/opencv.hpp>
看起来不错)
临时解决方案:
运行命令
vcpkg list opencv
,你会看到这样的:
注意opencv4之后的字符,例如图中的“x86-windows”。
进入vcpkg目录。找到并进入目录“ cpkg\installed\x86-windows\include\opencv4”。
将“ cpkg\installed\x86-windows\include\opencv4\opencv2”目录复制到“cpkg\installed\x86-windows\include”
仅此而已。