2017-05-06 291 views
2

我想为android构建OpenCV 3.2。当我尝试为armeabi-v7a配置构建它时,我没有编译它的问题。然而,当我试图编译它的arm64-V8A硬件我收到以下消息:构建OpenCV for Android的错误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的。OUPUTS这一行:

Target:      Android 21 armv7-a 

即使我设置的ABI arm64-V8A。任何想法为什么?

+0

尝试[this](https://github.com/skanti/Android-Manual-Build-Command-Line)。在开始设置时有点困难,但一旦完成,它基本上是没有Java UI **的普通'C++'编码**。 –

+1

所有这些路径都是arm32头文件,而不是arm64头文件。您的构建配置有问题。 –

回答

0

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

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

,然后用cmake的桂设置建立子系统。一切都会好起来的。