制作OpenCV时出错

Moh*_*imi 12 c++ opencv makefile cmake

我收到这个错误:

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
Run Code Online (Sandbox Code Playgroud)

相同的过程适用于另一台机器.有任何想法吗?

Moh*_*imi 15

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

更新:这正是应该如何做到的(用2.4.3和2.4.4测试).

你需要编辑

YOUR_BUILD_DIR/modules/features2d/CMakeFiles/opencv_features2d.dir/build.make
Run Code Online (Sandbox Code Playgroud)

搜索freak.cpp.您可以找到三个块:构建CXX ...,预处理CXX ......和编译CX ....我只需要更改Building部分.该块的最后一行如下所示:

.... YOUR_COMPILER $(CXX_DEFINES) $(CXX_FLAGS) ...
Run Code Online (Sandbox Code Playgroud)

如果你检查你发现CXX_FLAGS中有一个-O3.如果在CXX_FLAGS之后添加-O0,则会抑制O3.所以你的线条看起来应该是这样的.

.... YOUR_COMPILER $(CXX_DEFINES) $(CXX_FLAGS) -O0 ...
Run Code Online (Sandbox Code Playgroud)

这至少在这里工作!


小智 7

我在CentOS 5.x boxen上也花了很多时间来解决这个问题,这是我的解决方案.

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

这样做(或者有'root'的人在没有访问权限的情况下执行此操作):

  # yum install gcc44 gcc44-c++ -y
Run Code Online (Sandbox Code Playgroud)

...... 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/
Run Code Online (Sandbox Code Playgroud)

这将使您在CenOS/RHEL 5.x中成功构建OpenCV-2.4.3.