#c #tesseract
#c #tesseract
Вопрос:
Я пытаюсь перекрестно скомпилировать Tesseract для архитектуры arm64-v8a. Настройки архитектуры следующие.
set(ANDROID_TOOLCHAIN_NAME aarch64-linux-android)
set(CMAKE_ANDROID_ARCH_ABI arm64-v8a)
Проверки компилятора работают следующим образом.
Performing Test COMPILER_SUPPORTS_MARCH_NATIVE
Performing Test COMPILER_SUPPORTS_MARCH_NATIVE - Failed
Performing Test HAVE_AVX
Performing Test HAVE_AVX - Success
Performing Test HAVE_AVX2
Performing Test HAVE_AVX2 - Success
Performing Test HAVE_FMA
Performing Test HAVE_FMA - Success
Performing Test HAVE_SSE4_1
Performing Test HAVE_SSE4_1 - Success
Performing Test HAVE_NEON
Performing Test HAVE_NEON - Success
и tesseract simddetect.cpp имейте следующие макросы.
#if defined(HAVE_AVX) || defined(HAVE_AVX2) || defined(HAVE_FMA) || defined(HAVE_SSE4_1)
#define HAS_CPUID
#endif
#if defined(HAS_CPUID)
#if defined(__GNUC__)
# include <cpuid.h>
#elif defined(_WIN32)
# include <intrin.h>
#endif
#endif
#if defined(HAVE_NEON) amp;amp; !defined(__aarch64__)
#ifdef ANDROID
#include <cpu-features.h>
#else
/* Assume linux */
#include <sys/auxv.h>
#include <asm/hwcap.h>
#endif
#endif
SIMDDetect SIMDDetect::detector;
#if defined(__aarch64__)
// ARMv8 always has NEON.
bool SIMDDetect::neon_available_ = true;
#elif defined(HAVE_NEON)
// If true, then Neon has been detected.
bool SIMDDetect::neon_available_;
#else
// If true, then AVX has been detected.
bool SIMDDetect::avx_available_;
bool SIMDDetect::avx2_available_;
bool SIMDDetect::avx512F_available_;
bool SIMDDetect::avx512BW_available_;
// If true, then FMA has been detected.
bool SIMDDetect::fma_available_;
// If true, then SSe4.1 has been detected.
bool SIMDDetect::sse_available_;
#endif
ошибка компилятора
cpuid.h:11:2#error this header is for x86 only
Почему tesseract включает cpuid.h если это только файл x86? как можно исправить эту ошибку?
Ответ №1:
Судя по сообщению об ошибке, проблема заключается в вашем наборе инструментов:
- Вы пытаетесь создать 64-битную версию arm (
arm64-v8a
,aarch64-linux-android
) - Но ваш компилятор предоставляет только версию cpuid.h только для x86 (#ошибка этот заголовок предназначен только для x86)