Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error in making OpenCV

I'm getting this error:

OpenCV-2.4.3/modules/features2d/src/freak.cpp:437: error: unable to find a register to spill in class 'GENERAL_REGS'

After doing:

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

The same procedure works on another machine. Any ideas?

like image 414
Mohammad Moghimi Avatar asked Nov 27 '12 08:11

Mohammad Moghimi


4 Answers

You need to dig into the Makefiles to remove -O for freak.cpp.

UPDATE: This is exactly how one should do it (tested with 2.4.3 and 2.4.4).

you need to edit

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

Search for freak.cpp. You find three blocks: Building CXX..., Preprocessing CXX..., and Compiling CX.... I just needed to change the Building part. The last line of that block looks like this:

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

and if you check you find out that CXX_FLAGS has a -O3 in it. If you add -O0 after CXX_FLAGS it suppresses the O3. So your lines should look like this.

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

This is at least working here!

like image 185
Mohammad Moghimi Avatar answered Nov 15 '22 17:11

Mohammad Moghimi


I struggled with this for quite a few hours as well on my CentOS 5.x boxen, and here's my solution.

It's apparent you need to update 'gcc' but natively upgrading via RPM or just grabbing RPM's at random causing some serious config mgmt issues on your server. I don't have time to compile gcc/g++ via source right now either. After grazing out in the repo for a while, I found that there is, indeed, an 4.x release of gcc in the base repo.

Do this (or someone with 'root' to do it in case of OP who doesn't have access):

  # yum install gcc44 gcc44-c++ -y

...CentOS/RHEL have bundled a preview RPM of gcc-4.4.6.

Then when you go to do 'cmake' to build your release environment, do at least the following (your cmake params may vary):

  # 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/

That will give you a successful build of OpenCV-2.4.3 natively with CenOS/RHEL 5.x.

like image 21
wisehippy Avatar answered Nov 15 '22 17:11

wisehippy


Had the same problem and solved it like wisehippy with one slight change:

# 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> 
like image 1
C_Jay Avatar answered Nov 15 '22 17:11

C_Jay


I found the problem to be solved once I updated my c++ to point to g++44, instead of the default g++ which was 4.1.

As root verify that the files are the same before doing this step, it may not be necessary for you.

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

There should be nothing returned if the files are the same. If this is the case, continue. Backup your old file. You can delete the file as well because it's the same as g++, but I like to be careful.

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

Create a link so that C++ points to your g++44. You could use symbolic link here as well.

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

Done.

like image 1
Bert Davis Avatar answered Nov 15 '22 19:11

Bert Davis