LINUX.ORG.RU

OpenCV 3.2+Cuda 8.0

 , , , ,


0

1

Всем привет!

Кто-нибудь пробовал собирать OpenCV 3.2 с поддержкой Cuda 8.0 (карточка - nvidia gtx 1070)?

У меня заканчивается на ошибке:

cmake CMAKE_BUILD_TYPE=RELEASE -DCMAKE_CXX_COMPILER=g++-5 -DCMAKE_CC_COMPILER=gcc-5 -DCMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS} -std=c++11" -D WITH_CUDA=ON -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D CMAKE_INSTALL_PREFIX=/usr -D WITH_TBB=ON WITH_FFMPEG=ON -D WITH_GSTREAMER=OFF -D WITH_OPENGL=ON .. && make -j6

blablabla

[ 36%] Built target pch_Generate_opencv_superres
In file included from /usr/local/cuda-8.0/include/cuda_runtime.h:78:0,
                 from <command-line>:0:
/usr/local/cuda-8.0/include/host_config.h:119:2: error: #error -- unsupported GNU version! gcc versions later than 5 are not supported!
 #error -- unsupported GNU version! gcc versions later than 5 are not supported!
  ^~~~~
CMake Error at cuda_compile_generated_gpu_mat.cu.o.cmake:206 (message):
  Error generating
  /prj/opencv/build/modules/core/CMakeFiles/cuda_compile.dir/src/cuda/./cuda_compile_generated_gpu_mat.cu.o

Если я меняю компилер на clang++ 3.8.1 (который CUDA поддерживает), то opencv говорит, что он clang++ не поддерживает для сборки модулей CUDA.

Если я меняю компилер на gcc-4.9, то он перестаёт понимать код (nullptr и прочие ништяки с++11)

Это ещё половина веселья. Хочется собрать в тот же пакет ещё opencv_contrib с поддержкой той же CUDA. Там тоже несовместимости по версии компилятора.

При этом у некоторых ребят собралось даже на g++-6.2.

Кто-нибудь в курсе, как сотворить это шаманство и собрать opencv+cuda?

P.S.: пробовал версии компиляторов специфицировать явно и глобально. Всё равно то же самое.

★★

Ответ на: комментарий от anonymous

И это я тоже пробовал.

$ sudo ln -s /usr/bin/gcc-4.9 /usr/local/cuda/bin/gcc
$ sudo ln -s /usr/bin/g++-4.9 /usr/local/cuda/bin/g++

проблему не решает (вообще никак не повлияло).

$ sudo update-alternatives --config gcc
update-alternatives: ошибка: нет альтернатив для gcc
aido ★★ ()
Последнее исправление: aido (всего исправлений: 1)
Ответ на: комментарий от anonymous

если сделать ссылку на 5 gcc и выполнить команду, как указано выше, то ошибка та же unsupported GNU version! gcc versions later than 5 are not supported!

интересно другое: почему здесь написано, что 5.3.1 работает ок, а в /usr/local/cuda-8.0/include/host_config.h прописаны строчки:

#if defined(__GNUC__)

#if __GNUC__ > 5

#error -- unsupported GNU version! gcc versions later than 5 are not supported!

#endif /* __GNUC__ > 5 */
/*here are about clang*/
#endif /* __GNUC__ */
aido ★★ ()
Ответ на: комментарий от aido

Может потому что (5 > 5) == false ? Там отделиные макросы __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__

anonymous ()
Ответ на: комментарий от aido

В рамках извращения - как насчёт того, чтобы поставить в какое-нибудь специальное место gcc/g++ нужных версий, и временно переопределить PATH так, чтобы вызывать именно эти версии?

alex4321 ()
Ответ на: комментарий от aido

Для gcc 5.3.1, макроопределение __GNUC__ должно быть 5, потому условие #if __GNUC__ > 5 выполнятся не будет, а значит противоречия указанного тобой кода с рекомендациями по установке он невидии нету.

anonymous ()

в генте собирается на gcc 5.4.0, смотри ебилд

hizel ★★★★★ ()

Помогло злое решение: руками выкинул gcc-6 из системы, сломал часть зависимостей, собрал, поставил gcc-6 обратно.

aido ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.