【问题标题】:Error in making OpenCV制作 OpenCV 时出错
【发布时间】:2012-11-14 20:28:01
【问题描述】:

我收到此错误:

OpenCV-2.4.3/modules/features2d/src/freak.cpp:437:错误:无法 在“GENERAL_REGS”类中查找要溢出的寄存器

做完之后:

tar xfj OpenCV-2.4.3.tar.bz2
cd OpenCV-2.4.3
mkdir release
cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_NEW_PYTHON_SUPPORT=ON -D BUILD_EXAMPLES=ON ..
make

同样的过程可以在另一台机器上运行。有什么想法吗?

【问题讨论】:

  • 这可能是你的 gcc 的一个错误:gcc.gnu.org/bugzilla/show_bug.cgi?id=35135
  • 我遇到了同样的错误。
  • 我无权更改那台机器上的 gcc。是否有可能以某种方式告诉 cmake 以不同的方式编译它?
  • 或者以某种方式禁用在 Makefile 中编译此文件而不减少 opencv 库的功能。

标签: c++ opencv makefile cmake


【解决方案1】:

一旦我将c++ 更新为指向g++44,而不是默认的g++(4.1),我发现问题将得到解决。

在执行此步骤之前,以 root 身份验证文件是否相同,您可能不需要。

diff /usr/bin/c++ /usr/bin/g++

如果文件相同,则不应返回任何内容。如果是这种情况,请继续。 备份您的旧文件。您也可以删除该文件,因为它与g++ 相同,但我喜欢小心。

mv /usr/bin/c++ /usr/bin/c++4.1

创建一个链接,使C++ 指向您的g++44。你也可以在这里使用符号链接。

ln /usr/bin/g++44 /usr/bin/c++

完成。

【讨论】:

    【解决方案2】:

    遇到了同样的问题,并像 wisehippy 一样解决了它,只需稍作改动:

    # yum install gcc44 gcc44-c++ -y
    # mkdir release && cd release 
    # cmake -D CMAKE_BUILD_TYPE=RELEASE -DCMAKE_CXX_COMPILER=/usr/bin/g++44 -DCMAKE_C_COMPILER=/usr/bin/gcc44 <OpenCV_Dir> 
    

    【讨论】:

      【解决方案3】:

      您需要深入了解 Makefile 以删除freak.cpp 的-O。

      更新: 这正是人们应该做的(用 2.4.3 和 2.4.4 测试)。

      你需要编辑

      YOUR_BUILD_DIR/modules/features2d/CMakeFiles/opencv_features2d.dir/build.make
      

      搜索freak.cpp。您会发现三个块:构建 CXX...、预处理 CXX... 和编译 CX...。我只需要更改构建部分。该块的最后一行如下所示:

      .... YOUR_COMPILER $(CXX_DEFINES) $(CXX_FLAGS) ...
      

      如果你检查你会发现 CXX_FLAGS 里面有一个 -O3 。如果您在 CXX_FLAGS 之后添加 -O0,它会抑制 O3。所以你的线条应该是这样的。

      .... YOUR_COMPILER $(CXX_DEFINES) $(CXX_FLAGS) -O0 ...
      

      这至少在这里工作!

      【讨论】:

      • 谢谢!我必须补充一点,我的没有-O3 或任何-O 什么,但它是-o,我想它代表目标文件。所以结果是这样的... $(CXX_FLAGS) -O0 -o .... 并继续构建。
      【解决方案4】:

      我在 CentOS 5.x boxen 上也为此苦苦挣扎了好几个小时,这是我的解决方案。

      很明显,您需要更新“gcc”,但需要通过 RPM 进行本地升级,或者只是随机获取 RPM,从而导致服务器上出现一些严重的配置管理问题。我现在也没有时间通过​​源代码编译 gcc/g++。在 repo 中放牧了一段时间后,我发现基础 repo 中确实有 4.x 版本的 gcc。

      执行此操作(或在 OP 无权访问的情况下使用“root”执行此操作):

        # yum install gcc44 gcc44-c++ -y
      

      ...CentOS/RHEL 已经捆绑了 gcc-4.4.6 的预览 RPM。

      然后当你去做'cmake'来构建你的发布环境时,至少做以下事情(你的cmake参数可能会有所不同):

        # cd /path/to/OpenCV-2.4.3
        # mkdir release && cd release 
        # env CC=/usr/bin/gcc44 CXX=/usr/bin/g++44 cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/place/to/install/ -D BUILD_PYTHON_SUPPORT=ON /path/to/OpenCV-2.4.3/
      

      这将使您成功构建 OpenCV-2.4.3 原生与 CenOS/RHEL 5.x。

      【讨论】:

      • 我也以某种方式解决了这个问题。如果您删除了编译怪胎.cpp 的优化选项,它就可以工作。您需要深入研究 Makefile 以删除freak.cpp 的-O。有时间我会给出更全面的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 2015-03-23
      • 2015-07-31
      • 1970-01-01
      相关资源
      最近更新 更多