Ошибка при создании 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
Эта же процедура работает на другой машине. Любые идеи?
Ответы
Ответ 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++
Готово.