在 Raspberry Pi 上使用 TBB 编译 OpenCV 2

Compile OpenCV with TBB on Raspberry Pi 2

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

/home/mihai/tbb43_20150316oss/include/tbb/machine/gcc_armv7.h:31:2: error: #error compilation requires an ARMv7-a architecture.

我认为错误是因为在 OpenCV 生成文件中我必须包含 ARMv7 的标志

-DTBB_USE_GCC_BUILTINS=1 -D__TBB_64BIT_ATOMICS=0

问题是我不知道在哪里添加 it.Has 有人遇到过这个问题并且想分享解决方案吗?

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

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

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

2.Next 在同一文件中 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

或者你可以运行

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

而不仅仅是 运行宁

sudo make