【问题标题】:Compile OpenCV with TBB on Raspberry Pi 2在 Raspberry Pi 2 上使用 TBB 编译 OpenCV
【发布时间】:2015-05-08 19:00:53
【问题描述】:

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

/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

问题是我不知道在哪里包含它。有没有人遇到这个问题并想分享解决方案?

【问题讨论】:

  • 我已经解决了这个问题。这是一个小技巧:

标签: c++ opencv raspberry-pi tbb


【解决方案1】:

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

1.转到文件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'

在我在谷歌上搜索并找到这个之后:

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

【讨论】:

  • 这是必要的,也适用于 ARMv8 Pi 3。谢谢!
【解决方案2】:

或者你可以运行

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

而不仅仅是运行

sudo make 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-15
    • 2016-01-21
    • 1970-01-01
    • 2014-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多