【问题标题】:Error building OpenCV for Android arm64-v8a为 Android arm64-v8a 构建 OpenCV 时出错
【发布时间】:2017-10-05 01:33:46
【问题描述】:

我正在尝试为 android 构建 OpenCV 3.2。当我尝试为 armeabi-v7a 配置构建它时,编译它没有问题。但是,当我尝试为 arm64-v8a 硬件编译它时,我收到以下消息:

/Library/Android/sdk/ndk-bundle/platforms/android-21/arch-arm/usr/include/signal.h:87:12: error: expected ')'
    void (*sa_sigaction)(int, struct siginfo*, void*);
           ^
/Library/Android/sdk/ndk-bundle/platforms/android-21/arch-arm/usr/include/asm/signal.h:102:24: note: expanded from macro 'sa_sigaction'
#define sa_sigaction _u._sa_sigaction
                       ^
/Library/Android/sdk/ndk-bundle/platforms/android-21/arch-arm/usr/include/signal.h:87:10: note: to match this '('
    void (*sa_sigaction)(int, struct siginfo*, void*);
         ^
/Library/Android/sdk/ndk-bundle/platforms/android-21/arch-arm/usr/include/signal.h:87:12: error: duplicate member '_u'
    void (*sa_sigaction)(int, struct siginfo*, void*);
           ^
/Library/Android/sdk/ndk-bundle/platforms/android-21/arch-arm/usr/include/asm/signal.h:102:22: note: expanded from macro 'sa_sigaction'
#define sa_sigaction _u._sa_sigaction
                     ^
/Library/Android/sdk/ndk-bundle/platforms/android-21/arch-arm/usr/include/signal.h:86:18: note: previous declaration is here
    sighandler_t sa_handler;
                 ^
/Library/Android/sdk/ndk-bundle/platforms/android-21/arch-arm/usr/include/asm/signal.h:101:20: note: expanded from macro 'sa_handler'
#define sa_handler _u._sa_handler  

cmake 是这样配置的:

cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_TOOLCHAIN -DANDROID_NDK=$NDK_ROOT  -DANDROID_ABI=arm64-v8a  -DANDROID_NATIVE_API_LEVEL=21  -DCMAKE_INSTALL_PREFIX=~/opencv/arm64 -DBUILD_TESTS=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_TIFF=false -DTIFF_LIBRARY=$TIFF_LIBRARY -DTIFF_INCLUDE_DIR=$TIFF_INCLUDE_DIR -DBUILD_OPENEXR=false  

还有其他人遇到过这个问题吗?我已经为此苦苦挣扎了两天了。任何帮助将不胜感激。

编辑:我注意到 cmake 输出这一行:

Target:                      Android 21 armv7-a

即使我将 abi 设置为 arm64-v8a。任何想法为什么?

【问题讨论】:

  • 试试this。一开始设置有点困难,但一旦设置完成,它基本上就是常规的c++ 编码没有Java UI
  • 所有这些路径都是 arm32 标头,而不是 arm64 标头。您的构建配置出了点问题。

标签: android opencv android-ndk cmake arm64


【解决方案1】:

希望您已经解决了这个问题。 我在先使用 cmake-gui,然后分配工具链文件时也遇到了这个问题。 我解决了这个问题,只需使用

cmake .. -DCMAKE_TOOLCHAIN_FILE=$NDK_PATH/build/cmake/android.toolchain.cmake -DANDROID_ABI="arm64-v8a"

然后使用 cmake-gui 设置构建子系统。那么一切都会好起来的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 2018-12-21
    • 2021-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多