【问题标题】:cmake is not working in opencv c++ projectcmake 在 opencv c++ 项目中不起作用
【发布时间】:2012-04-02 06:41:13
【问题描述】:

我需要你的帮助! 我在这个链接中有这个 C++ 代码

[链接]https://github.com/royshil/FoodcamClassifier

两天以来我一直在尝试编译它,但我失败了 他们说我必须使用 cmake,我已经尝试过“GUI 版本,它给了我与 cmake 本身相关的错误。 所以我拿了 cpp 和头文件并创建了一个新项目,但我现在有 100 个与 opencv 库相关的错误,我向上帝发誓,我确信我的项目中包含包含文件夹和它的库!不知道怎么回事!

有什么想法吗?

这是错误:

'CMake 错误:无法打开缓存文件进行保存。 C:/程序文件/CMake 2.8/bin/CMakeCache.txt CMakeLists.txt:4 (FIND_PACKAGE) 处的 CMake 错误: 找不到模块 FindOpenCV.cmake 或包的配置文件 开放式简历。 调整 CMAKE_MODULE_PATH 以找到 FindOpenCV.cmake 或将 OpenCV_DIR 设置为 包含 OpenCV 的 CMake 配置文件的目录。该文件将 具有以下名称之一: OpenCVConfig.cmake opencv-config.cmake OpenCV_DIR-NOTFOUND 配置不完整,出现错误! CMake 错误:无法打开缓存文件进行保存。 C:/程序文件/CMake 2.8/bin/CMakeCache.txt CMake错误::系统错误:权限被拒绝 CMake错误::系统错误:权限被拒绝'

【问题讨论】:

  • 您尝试过cmake -D CMAKE_CXX_FLAGS=-fopenmp . ; make -j4,按照自述文件吗?
  • @molbdnilo:是的,我做到了,但是没有用
  • 如果没有您所面临的具体错误,我们将无法为您提供帮助。
  • @karlphilip 我将错误添加到问题中
  • [link]tinypic.com/r/2saayqu/5 有人在吗?

标签: c++ opencv cmake


【解决方案1】:

在 Linux 上我做了以下操作:

$ git clone https://github.com/royshil/FoodcamClassifier.git
$ cd FoodcamClassifier/
$ mkdir build
$ cd build/
$ cmake ../

-- The C compiler identification is GNU
-- The CXX compiler identification is GNU
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
/usr/local/share/OpenCV
-- Configuring done
-- Generating done
-- Build files have been written to: /home/cog/workspace/opencv/FoodcamClassifier/build

$ make

Scanning dependencies of target build-vocabulary
[  8%] Building CXX object CMakeFiles/build-vocabulary.dir/build_vocabolary.cpp.o
Linking CXX executable build-vocabulary
[  8%] Built target build-vocabulary
Scanning dependencies of target foodcam-predict
[ 16%] Building CXX object CMakeFiles/foodcam-predict.dir/foodcam_predict.cpp.o
[ 25%] Building CXX object CMakeFiles/foodcam-predict.dir/predict_common.cpp.o
Linking CXX executable foodcam-predict
[ 25%] Built target foodcam-predict
Scanning dependencies of target kmeans-trainer
[ 33%] Building CXX object CMakeFiles/kmeans-trainer.dir/kmeans_trainer.cpp.o
Linking CXX executable kmeans-trainer
[ 33%] Built target kmeans-trainer
Scanning dependencies of target make-test-background
[ 41%] Building CXX object CMakeFiles/make-test-background.dir/make_test_background_image.cpp.o
Linking CXX executable make-test-background
[ 41%] Built target make-test-background
Scanning dependencies of target manual-classifier
[ 50%] Building CXX object CMakeFiles/manual-classifier.dir/manual_classifier.cpp.o
Linking CXX executable manual-classifier
[ 50%] Built target manual-classifier
Scanning dependencies of target test-classifiers
[ 58%] Building CXX object CMakeFiles/test-classifiers.dir/test_classifiers.cpp.o
[ 66%] Building CXX object CMakeFiles/test-classifiers.dir/predict_common.cpp.o
Linking CXX executable test-classifiers
[ 66%] Built target test-classifiers
Scanning dependencies of target train-SVM-alone
[ 75%] Building CXX object CMakeFiles/train-SVM-alone.dir/train_SVM_alone.cpp.o
[ 83%] Building CXX object CMakeFiles/train-SVM-alone.dir/training_common.cpp.o
Linking CXX executable train-SVM-alone
[ 83%] Built target train-SVM-alone
Scanning dependencies of target train-bovw
[ 91%] Building CXX object CMakeFiles/train-bovw.dir/train_bovw.cpp.o
[100%] Building CXX object CMakeFiles/train-bovw.dir/training_common.cpp.o
Linking CXX executable train-bovw
[100%] Built target train-bovw

【讨论】:

  • 实际上我的设备上没有 Linux,我尝试在上面提到的 Windows 上使用 cmake,但我失败了 :( 请你上传结果编译代码给我吗?我会很感激的!!
  • 这行不通。在 Linux 上编译的应用程序只能在 Linux 上运行。
  • 你不愿意帮助自己,我不能创造奇迹 :) 我之前已经告诉过你了,如果你不粘贴你正在观察它的错误很难解决你的问题。我的水晶球坏了,对不起。
【解决方案2】:

您可能必须在CMakeLists.txt 之前FIND_PACKAGE(OpenCV Required) 添加以下代码(在我的情况下)

SET("OpenCV_DIR" "PATH/TO/CMake/build")

在我的安装中它解决了这个问题,因为提到的文件位于构建文件夹中。

【讨论】:

    【解决方案3】:

    所以,这就是为我解决这个问题的原因。

    首先,如果有疑问 - 请务必在尝试添加其他路径/值/mod 之前清除您的 CMake“缓存”。我知道这似乎有点奇怪,但以前尝试解决问题的遗留问题可能掩盖了真正的问题。最简单的方法是从轨道中删除您的源外“构建”目录(唯一确定的方法),然后重试...

    其次,更根本的是,您的目标编译器和架构是什么?您下载的 OpenCV 版本提供了什么?例如,截至编写 OpenCV 3.1 时我下载的预构建安装程序提供了 ~\build\x64\vc12 & vc14 - 当然是针对 VisualStudio 2012 和 2014 构建的。

    我使用的是 Mingw 并针对 x86 - 所以我下载了源代码(通过 github 发布为 *.zip 文件)并在 \opencv 文件夹中执行这些步骤:

    mkdir build
    cd build
    cmake -G  "MinGW Makefiles" ..
    cmake --build .
    cmake --build . --target install
    

    您当然可以通过各种开关控制构建,还可以指定安装的位置。

    执行“安装”步骤 - 默认情况下是将最终库等复制到名为“安装”的文件夹中 - 是关键,因为它将所有生成的库和文件正确放置在正确的位置并包含神奇的OpenCVConfig.cmake 文件在顶部。

    因此,我终于可以指向我的项目 CMakeLists.txt 文件来解析 OpenCV:

    set("OpenCV_DIR" "C:/Code/opencv/build/install")
    
    find_package( OpenCV REQUIRED )
    

    并且,确保生成的可执行文件知道 *.dll 的:

    PATH=%PATH%;C:\Code\opencv\build\install\x86\mingw\bin
    

    【讨论】:

      【解决方案4】:

      对我来说,在 Windows 上,当我在打开文件编辑器 (Atom) 的情况下运行批处理脚本时收到了类似的错误消息。不要认为最初的问题提到了操作系统,我确定我的问题是特定于 Windows 的。

      虽然代码示例中的 URL 暗示了操作系统。

      如果不是文件句柄/编辑器问题,则可能是文件权限错误。

      【讨论】:

        猜你喜欢
        • 2022-01-06
        • 1970-01-01
        • 1970-01-01
        • 2022-08-14
        • 1970-01-01
        • 1970-01-01
        • 2019-12-17
        • 2014-11-20
        相关资源
        最近更新 更多