2015-05-08 3 views
3

Я попытался построить OpenCV на Raspberry Pi 2 с TBB, я установил TBB из источника на Pi, я указал путь к TBB libs для конфигурации cmake, но Я получаю сообщение об ошибке:Скомпилировать OpenCV с TBB на Raspberry Pi 2

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

Я думаю, что ошибка происходит потому, что в OpenCV Makefile я должен включать флаг ARMv7

-DTBB_USE_GCC_BUILTINS=1 -D__TBB_64BIT_ATOMICS=0

проблема заключается в том, что я не знаю, где включите его. Кто-нибудь имел эту проблему и хотел бы поделиться решением?

+0

Я решил эту проблему. Это было немного tricki: –

ответ

2

я решил это: 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' 

После того как я искал в гугле и нашел это:

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 
+0

Это было необходимо и работало ARMv8 Pi 3 тоже. Благодаря! – fiat

1

или вы можете запустить

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

вместо того, чтобы просто работает

sudo make 
Смежные вопросы