2012-11-27 13 views
12

sto ottenendo questo errore:Errore nel fare OpenCV

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

Dopo aver fatto:

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 

La stessa procedura funziona su un'altra macchina. Qualche idea?

+1

Potrebbe trattarsi di un bug del tuo gcc: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35135 –

+1

Ho ricevuto lo stesso errore. – jasonlfunk

+0

Non ho accesso per modificare il gcc su quella macchina. È possibile in qualche modo dire a cmake di compilarlo in modo diverso? –

risposta

15

È necessario scavare nei Makefile per rimuovere -O per freak.cpp.

AGGIORNAMENTO: Questo è esattamente come si dovrebbe fare (testato con 2.4.3 e 2.4.4).

è necessario modificare

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

Cerca freak.cpp. Trovi tre blocchi: Building CXX ..., Preprocessing CXX ... e Compiling CX .... Ho solo dovuto cambiare la parte Building. L'ultima riga di quel blocco assomiglia a questo:

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

e se controlli si scopre che ha una CXX_FLAGS -O3 in esso. Se aggiungi -O0 dopo CXX_FLAGS sopprime l'O3. Quindi le tue linee dovrebbero assomigliare a questo.

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

Questo funziona almeno qui!

+0

Grazie! Devo aggiungere che il mio non ha '-O3' o qualsiasi' -O' whatsover ma it's'-o' che sta per file oggetto suppongo. Quindi il risultato è come '... $ (CXX_FLAGS) -O0 -o ....' e continua a crescere. – 5argon

7

Ho lottato con questo per parecchie ore pure sul mio boxbox CentOS 5.x, ed ecco la mia soluzione.

È evidente che è necessario aggiornare 'gcc', ma l'aggiornamento nativo tramite RPM o semplicemente l'acquisizione di RPM a caso causano alcuni seri problemi di config mgmt sul server. Al momento non ho nemmeno il tempo di compilare gcc/g ++ via fonte. Dopo aver sfiorato il repository per un po ', ho scoperto che c'è una versione 4.x di gcc nel repository di base.

Fate questo (o qualcuno con 'root' di farlo in caso di OP che non ha accesso):

# yum install gcc44 gcc44-c++ -y 

... CentOS/RHEL hanno impacchettato in anteprima RPM di gcc-4.4 .6.

Poi quando si va a fare 'CMake' per costruire il proprio ambiente di rilascio, fare almeno i seguenti (i vostri cmake params possono variare):

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

Che vi darà una build di successo di OpenCV-2.4 .3 in modo nativo con CenOS/RHEL 5.x.

+0

Ho risolto il problema in qualche modo. Se rimuovi l'opzione di ottimizzazione per la compilazione di freak.cpp, funziona. Devi scavare nel Makefile per rimuovere -O per freak.cpp. Avrò una risposta più completa quando avrò tempo. –

1

avuto lo stesso problema e risolto come wisehippy con una lieve modifica:

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

ho trovato il problema da risolvere una volta ho aggiornato il mio c++ per puntare a g++44, invece del default g++ che era 4.1 .

Come root verificare che i file siano gli stessi prima di eseguire questo passaggio, potrebbe non essere necessario per l'utente.

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

Non ci dovrebbe essere nulla restituito se i file sono gli stessi. Se questo è il caso, continua. Effettua il backup del tuo vecchio file. Puoi anche eliminare il file perché è lo stesso di g++, ma mi piace fare attenzione.

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

Creare un link in modo che C++ punti al tuo g++44. Puoi anche usare il link simbolico qui.

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

Fatto.

Problemi correlati