2012-11-27 20 views
12

dostaję ten błąd:Błąd w tworzeniu OpenCV

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

Po wykonaniu:

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 

Taka sama procedura działa na innym komputerze. Jakieś pomysły?

+1

To może być błąd twojego gcc: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35135 –

+1

Otrzymuję ten sam błąd. – jasonlfunk

+0

Nie mam dostępu do zmiany gcc na tym komputerze. Czy można w jakiś sposób powiedzieć, żeby cmake kompilował go inaczej? –

Odpowiedz

15

Musisz przekopać się do plików Makefile, aby usunąć -O dla freak.cpp.

AKTUALIZACJA: Dokładnie tak należy postępować (testowane z 2.4.3 i 2.4.4).

trzeba edytować

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

Szukaj freak.cpp. Znajdziesz trzy bloki: Building CXX ..., Preprocessing CXX ... i Compiling CX .... Po prostu potrzebowałem zmienić część Building. Ostatni wiersz tego bloku wygląda następująco:

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

a jeśli sprawdzeniu okazuje się, że CXX_FLAGS ma opcja -O3 w nim. Jeśli dodasz -O0 po CXX_FLAGS, to blokuje O3. Więc twoje linie powinny wyglądać tak.

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

To przynajmniej działa tutaj!

+0

Dzięki! Muszę dodać, że moje nie ma żadnego "-O3" ani żadnego "-O", ale jest '-o', co oznacza plik obiektowy, który przypuszczam. Wynik jest taki jak ten ... $ (CXX_FLAGS) -O0 -o .... 'i nadal się buduje. – 5argon

7

Walczyłem z tym przez kilka godzin na moim pudełku CentOS 5.x, a oto moje rozwiązanie.

To oczywiste, że musisz zaktualizować "gcc", ale natywnie uaktualnić za pomocą RPM lub po prostu chwytając RPM losowo, powodując poważne problemy konfiguracyjne MGMT na serwerze. Nie mam czasu, aby skompilować gcc/g ++ przez źródło już teraz. Po wypasaniu w repozytorium przez pewien czas odkryłem, że w bazowym repo jest rzeczywiście 4.x gcc.

zrobić (lub kogoś z 'root', aby zrobić to w przypadku PO, którzy nie mają dostępu):

# yum install gcc44 gcc44-c++ -y 

... CentOS/RHEL są dołączane do podglądu RPM gcc-4.4 .6.

Potem gdy idziesz do zrobienia 'cmake' zbudować środowisko zwalniającą, wykonaj co najmniej następujące (twoi CWprowadä params mogą ulec zmianie):

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

To daje pomyślne zbudowanie OpenCV-2.4 .3 natywnie z CenOS/RHEL 5.x.

+0

W jakiś sposób rozwiązałem problem. Jeśli usuniesz opcję optymalizacji do kompilacji freak.cpp, to działa. Musisz zagłębić się w Makefile, aby usunąć -O dla freak.cpp. Będę bardziej wszechstronną odpowiedzią, gdy dostanę czas. –

1

miał ten sam problem i rozwiązać go jak wisehippy z jedną niewielką zmianą:

# 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

znalazłem problem, który należy rozwiązać raz zaktualizowałem moją c++ aby wskazać g++44, zamiast domyślnego g++ który wyniósł 4,1 .

Jako root sprawdź, czy pliki są takie same przed wykonaniem tego kroku, może nie być to konieczne.

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

Nie powinno być nic zwróconego, jeśli pliki są takie same. W takim przypadku kontynuuj. Utwórz kopię zapasową starego pliku. Możesz również usunąć plik, ponieważ jest taki sam jak g++, ale lubię być ostrożny.

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

Tworzenie łącza tak, że C++ punkty do swojego g++44. Możesz tu również użyć dowiązania symbolicznego.

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

Gotowe.

Powiązane problemy