在Raspberry Pi 2上使用TBB编译OpenCV

时间:2015-05-08 19:00:53

标签: c++ opencv raspberry-pi tbb

我尝试使用TBB在Raspberry Pi 2上构建OpenCV,我已经在Pi上从源代码安装了TBB,我已经指定了TBB库到cmake配置的路径但是我&# 39;我得到错误:

  

/home/mihai/tbb43_20150316oss/include/tbb/machine/gcc_armv7.h:31:2:错误:#error编译需要ARMv7-a架构。

我认为错误是因为在OpenCV makefile中我必须包含ARMv7的标志

  

-DTBB_USE_GCC_BUILTINS = 1 -D__TBB_64BIT_ATOMICS = 0

问题是我不知道在哪里包含它。有没有人有这个问题,abd想分​​享一个解决方案?

2 个答案:

答案 0 :(得分:2)

我已经解决了这个问题:D。对于遇到此问题的人,请按照以下步骤操作:

1.转到文件gcc_armv7.h第31行和注释行

30 #if !(__ARM_ARCH_7A__)
31 #error compilation requires an ARMv7-a architecture.   
32 #endif

2.接下来在同一个文件gcc_armv7.h中转到第56行并将其替换为

56 #define __TBB_full_memory_fence() 0xffff0fa0  // __asm__ __volatile__("dmb ish": : :"memo    ry")

对于那些想要解释我是如何做到的人,在第一步之后我得到以下错误:

/tmp/ccnkbkfd.s:313: Error: selected processor does not support ARM mode `dmb ish'
/tmp/ccnkbkfd.s:386: Error: selected processor does not support ARM mode `dmb ish'
/tmp/ccnkbkfd.s:533: Error: selected processor does not support ARM mode `dmb ish'
/tmp/ccnkbkfd.s:562: Error: selected processor does not support ARM mode `dmb ish'

我在google上搜索后发现了这个:

The alternative for using dmb is to call the Linux kernel __kuser_memory_barrier

the __kuser_memory_barrier helper operation is found in all ARM kernels 2.6.15 and later
and provide a way to issue a memory barrier that will work across all ARM arch.__kuser_memory_barrier 
helper function found at address 0xffff0fa0

答案 1 :(得分:1)

或者你可以运行

sudo make CXXFLAGS="-DTBB_USE_GCC_BUILTINS=1 -D__TBB_64BIT_ATOMICS=0"

而不是仅仅运行

sudo make