我正在尝试安装 OpenCV,但是当我尝试使用 CMake 进行编译时,我总是会收到问题中所述的错误,通常在 4% - 6% 左右。
[ 6%] Building CXX object modules/core/CMakeFiles
/opencv_test_core_pch_dephelp.dir/opencv_test_core_pch_dephelp.cxx.o
In file included from /home/joey/opencv/opencv/opencv/modules/core/test/test_precomp.hpp:12:0,
from /home/joey/opencv/opencv/build/modules/core/opencv_test_core_pch_dephelp.cxx:1:
/home/joey/opencv/opencv/opencv/modules/core/include/opencv2/core/private.hpp:66:12: fatal error: Eigen/Core: No such file or directory
# include <Eigen/Core>
^~~~~~~~~~~~
compilation terminated.
modules/core/CMakeFiles/opencv_test_core_pch_dephelp.dir/build.make:62: recipe for target 'modules/core/CMakeFiles/opencv_test_core_pch_dephelp.dir/opencv_test_core_pch_dephelp.cxx.o' failed
make[2]: *** [modules/core/CMakeFiles/opencv_test_core_pch_dephelp.dir/opencv_test_core_pch_dephelp.cxx.o] Error 1
CMakeFiles/Makefile2:1229: recipe for target 'modules/core/CMakeFiles/opencv_test_core_pch_dephelp.dir/all' failed
make[1]: *** [modules/core/CMakeFiles/opencv_test_core_pch_dephelp.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
因此,在谷歌搜索之后,我决定只需要更改 CMake 用于 Eigen 的位置。使用 cmake-gui,我根据类似问题的答案建议将 Eigen3_DIR 从 /usr/lib/cmake/eigen3 更改为 /usr/include/eigen3(不完全相似;他们只是建议更改路径并给出后一条路径)。当我点击配置或尝试生成时出现问题:CMake 将条目恢复为前者。我试着查看一些 CMake 文件(CMakeCache.txt、CMakeLists.txt),但我真的不知道我在看什么所以我想我会问比我更有知识的人。我也查看了这两个路径,在这两种情况下都存在所需的文件——eigen3/Eigen/(头文件)和 eigen3/(cmake 配置文件)。
我正在运行 Ubuntu 18.04。我试过在两个目录中安装:一次在 ~/opencv 中,另一个在 /mnt/Linux/opencv 中。在每次编译尝试中,我都会删除构建文件并重建 OpenCV。两者都产生了相同的结果。我也试过删除并重新克隆源代码,从头开始几次都无济于事。
这是怎么回事?我是不是缺少设置,甚至是在关注问题?任何帮助将不胜感激,指导或馈赠。
这可能有点骇人听闻,但我修复了它:
是什么让我找到了解决方案——它不是 OpenCV,但它是同一类问题。
在 cmake/OpenCVFindLibsPerf.cmake 中,我注释掉了 Eigen 块的这一部分:
以及将 find_package 调用更改为
完整的 Eigen 代码块:
无论出于何种原因,注释掉的部分通过了检查 (Eigen3_FOUND),但没有为 OpenCV 提供任何工作路径。我对 CMake 的了解有限(第一次弄乱 CMake 代码),所以我真的不知道我做了什么或可能产生的任何影响。为什么会这样?
您不应直接使用克隆的 Eigen 目录。您需要使用 CMake 准备构建文件,然后将构建文件夹添加到 Eigen3_DIR,将安装/包含文件夹添加到 EIGEN_INCLUDE_PATH。