Подтвердить что ты не робот

Ошибка при создании OpenCV

Я получаю эту ошибку:

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

Эта же процедура работает на другой машине. Любые идеи?

4b9b3361

Ответ 1

Вам нужно копать в Make файлы, чтобы удалить -O для freak.cpp.

UPDATE: Это как раз то, как нужно это делать (проверено с помощью 2.4.3 и 2.4.4).

вам нужно отредактировать

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

Найти freak.cpp. Вы найдете три блока: Building CXX..., Preprocessing CXX... и Compiling CX.... Мне просто нужно было изменить часть здания. Последняя строка этого блока выглядит так:

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

и если вы проверите, узнаете, что в CXX_FLAGS есть -O3. Если вы добавите -O0 после CXX_FLAGS, он подавляет O3. Итак, ваши строки должны выглядеть так.

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

Это, по крайней мере, работает здесь!

Ответ 2

Я боролся с этим в течение нескольких часов, а также на моем CentOS 5.x boxen, и вот мое решение.

Очевидно, что вам нужно обновить "gcc", но изначально обновить через RPM или просто захватить RPM в случайном порядке, вызывая серьезные проблемы с конфигурацией mgmt на вашем сервере. У меня нет времени для компиляции gcc/g++ через источник прямо сейчас. После того, как некоторое время выплыл в репо, я обнаружил, что в базовом репо действительно есть 4.x выпуск gcc.

Сделайте это (или кто-то с "root", чтобы сделать это в случае OP, у которого нет доступа):

  # yum install gcc44 gcc44-c++ -y

... CentOS/RHEL связали RPM предварительного просмотра gcc-4.4.6.

Затем, когда вы собираетесь делать '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.

Ответ 3

Имел ту же проблему и решил ее, как 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> 

Ответ 4

Я решил, что проблема будет решена после обновления моего 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++

Готово.