OpenCV configure with TBB for ARM (Ubuntu, 3.0.63)

2019-07-12 03:10发布

问题:

I'm trying to compile OpenCV libs with TBB support for odroid U2 (with Quad core ARM Cortex-A9 MPCore). I have no problem with compile current OpenCV (from github) without TBB. And also I have no problem with compiling TBB libs fron sources - tbb41_20130116oss_src.tgz and I have successfully builded TBB libs:

root@odroid:~/src/tbb41_20130116oss/build/linux_armv7l_gcc_cc4.6_libc2.15_kernel3.0.63_release# ls
arena.d                    concurrent_queue.o      frontend.d           libtbbmalloc.so.2        proxy.d               scheduler.o           task_v2.d                   tbb_thread.d
arena.o                    concurrent_queue_v2.d   frontend.o           libtbbmalloc_proxy.so    proxy.o               semaphore.d           task_v2.o                   tbb_thread.o
backend.d                  concurrent_queue_v2.o   governor.d           libtbbmalloc_proxy.so.2  queuing_mutex.d       semaphore.o           tbb.def                     tbbmalloc.d
backend.o                  concurrent_vector.d     governor.o           market.d                 queuing_mutex.o       spin_mutex.d          tbb_function_replacement.d  tbbmalloc.def
backref.d                  concurrent_vector.o     itt_notify.d         market.o                 queuing_rw_mutex.d    spin_mutex.o          tbb_function_replacement.o  tbbmalloc.o
backref.o                  concurrent_vector_v2.d  itt_notify.o         mutex.d                  queuing_rw_mutex.o    spin_rw_mutex.d       tbb_main.d                  tbbmallocproxy.def
cache_aligned_allocator.d  concurrent_vector_v2.o  itt_notify_malloc.d  mutex.o                  reader_writer_lock.d  spin_rw_mutex.o       tbb_main.o                  tbbvars.csh
cache_aligned_allocator.o  condition_variable.d    itt_notify_malloc.o  observer_proxy.d         reader_writer_lock.o  spin_rw_mutex_v2.d    tbb_misc.d                  tbbvars.sh
concurrent_hash_map.d      condition_variable.o    large_objects.d      observer_proxy.o         recursive_mutex.d     spin_rw_mutex_v2.o    tbb_misc.o                  version_string.ver
concurrent_hash_map.o      critical_section.d      large_objects.o      pipeline.d               recursive_mutex.o     task.d                tbb_misc_ex.d
concurrent_monitor.d       critical_section.o      libtbb.so            pipeline.o               rml_tbb.d             task.o                tbb_misc_ex.o
concurrent_monitor.o       dynamic_link.d          libtbb.so.2          private_server.d         rml_tbb.o             task_group_context.d  tbb_statistics.d
concurrent_queue.d         dynamic_link.o          libtbbmalloc.so      private_server.o         scheduler.d           task_group_context.o  tbb_statistics.o
root@odroid:~/src/tbb41_20130116oss/build/linux_armv7l_gcc_cc4.6_libc2.15_kernel3.0.63_release#

I can compile my own programm with g++ using this TBB libs, but I can't configure OpenCV to see this TBB libs:

root@odroid:~/src/work/opencv/release# cmake -D CMAKE_BUILD_TYPE=RELEASE -D  WITH_TBB=ON -D CMAKE_INSTALL_PREFIX=/usr/local ..
-- Detected version of GNU GCC: 46 (406)
-- Found OpenEXR: /usr/lib/libIlmImf.so
-- checking for module 'gstreamer-app-0.10'
--   package 'gstreamer-app-0.10' not found
-- Looking for linux/videodev.h
-- Looking for linux/videodev.h - not found
-- Looking for linux/videodev2.h
-- Looking for linux/videodev2.h - found
-- Looking for sys/videoio.h
-- Looking for sys/videoio.h - not found
-- Looking for libavformat/avformat.h
-- Looking for libavformat/avformat.h - found
-- Looking for ffmpeg/avformat.h
-- Looking for ffmpeg/avformat.h - not found
-- checking for module 'tbb'
--   package 'tbb' not found
[...]

could you explain how I can do this? Thank you!

回答1:

Try building opencv with the included TBB build (BUILD_TBB=true), works for me on odroid-x2:

cmake -D CMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local/opencv-2.4-ec15d6f383e0aae -DBUILD_TBB:BOOL="1" -DWITH_TBB:BOOL="1" ..
make -j 4

If you do a make install, be sure to copy ./lib/libtbb.so to somewhere where it can be found, otherwise opencv just leaves it there.