通过 vcpkg 安装包导致 "opencv2/opencv.hpp: No such file or directory" 错误
Installing package via vcpkg causing a "opencv2/opencv.hpp: No such file or directory" error
我已经使用 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 或 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,但问题没有解决,另一个 Whosebug link 是 [这里][1],以防它有点帮助。 (我尝试了建议的方法,我找到了 opencv 库并将其移动到正确的地址,但没有帮助)
编辑: 根据@Alan Birtles 的建议,最小可重现示例,
这些是我执行的步骤:
- 通过 git 克隆 [vcpkg 存储库][2]
安装 vcpkg
- 运行 bootstrap 命令 (.\vcpkg\bootstrap-vcpkg.bat)
- 通过 vcpkg 安装 opencv(vcpkg 安装 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"
]
}
简单地说:
a) VS Code 不受 vcpkg 集成安装的影响,只有 MSBuild 是 ...
b) 设置 CMAKE_TOOLCHAIN_FILE
仅在第一个 project()
调用
之前有效
c) 如果已经配置了 cmake 缓存,则通过 cmake.configureSettings
或其他方式在 project()
之前设置 CMAKE_TOOLCHAIN_FILE
将不起作用。
d) 不要修改 CMAKE_PREFIX_PATH
因此,从一个没有任何缓存的干净的 cmake 构建开始:通过您想要的任何方式在 project()
之前设置 CMAKE_TOOLCHAIN_FILE
并且它有效。您可能还需要设置 VCPKG_TARGET_TRIPLET
。
(使用 #include <opencv2/opencv.hpp>
似乎没问题)
我已经使用 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 或 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,但问题没有解决,另一个 Whosebug link 是 [这里][1],以防它有点帮助。 (我尝试了建议的方法,我找到了 opencv 库并将其移动到正确的地址,但没有帮助)
编辑: 根据@Alan Birtles 的建议,最小可重现示例, 这些是我执行的步骤:
- 通过 git 克隆 [vcpkg 存储库][2] 安装 vcpkg
- 运行 bootstrap 命令 (.\vcpkg\bootstrap-vcpkg.bat)
- 通过 vcpkg 安装 opencv(vcpkg 安装 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"
]
}
简单地说:
a) VS Code 不受 vcpkg 集成安装的影响,只有 MSBuild 是 ...
b) 设置 CMAKE_TOOLCHAIN_FILE
仅在第一个 project()
调用
之前有效
c) 如果已经配置了 cmake 缓存,则通过 cmake.configureSettings
或其他方式在 project()
之前设置 CMAKE_TOOLCHAIN_FILE
将不起作用。
d) 不要修改 CMAKE_PREFIX_PATH
因此,从一个没有任何缓存的干净的 cmake 构建开始:通过您想要的任何方式在 project()
之前设置 CMAKE_TOOLCHAIN_FILE
并且它有效。您可能还需要设置 VCPKG_TARGET_TRIPLET
。
(使用 #include <opencv2/opencv.hpp>
似乎没问题)