【问题标题】:Android Studio NDK iostream file not found and does not able to enable neon in CMakeList找不到 Android Studio NDK iostream 文件,并且无法在 CMakeList 中启用霓虹灯
【发布时间】:2017-12-06 00:56:48
【问题描述】:

我是使用 NDK 和 CMake 的新手,当我编译我的 C++ 库时遇到问题,Android Studio 一直在编译它

错误:(28, 2) 错误:“NEON 支持未启用”

错误:错误:不支持“neon_vector_type”属性 目标

错误:(17, 10) 致命错误:找不到“iostream”文件

我看到一些解决方案说我应该在 Application.mk 中添加 APP_STL := stlport_static

但是,我使用的是 CMakeLists 而不是 Application.mk。

所以我在 CMAKE_C_FLAGS 上添加了 -DANDROID_ARM_NEON=TRUE -DAPP_STL=stlport_static,但它仍然产生同样的错误

这是我的 CMakeLists

set (pathToProject /home/user/project)
set (pathToOpenCv /home/user/project/OpenCV330)
FILE(GLOB_RECURSE cppfiles src/main/cpp/src/*)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED on)

find_package(OpenMP)
add_definitions(-fPIC)
add_definitions(-fopenmp)
add_definitions(-Ofast)
add_definitions(-DANDROID_STL=c++_shared)
add_definitions(-flax-vector-conversions)
add_definitions(-fopenmp)

cmake_minimum_required(VERSION 3.4.1)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fpermissive -DANDROID_ARM_NEON=TRUE -DAPP_STL=stlport_static")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")

include_directories(${pathToProject}/app/src/main/cpp/src/include)
include_directories(${pathToOpenCv}/sdk/native/jni/include)

add_library(lib_opencv SHARED IMPORTED)
add_library(native-lib SHARED src/main/cpp/native-lib.cpp )
add_library(mylibrary SHARED ${cppfiles} )

set_target_properties(lib_opencv PROPERTIES IMPORTED_LOCATION ${pathToProject}/app/src/main/jniLibs/${ANDROID_ABI}/libopencv_java3.so)

find_library(log-lib log)

target_link_libraries(
                       native-lib
                       ${log-lib}
                       lib_opencv
                       mylibrary
                       )

更新:

我还发现了另外 1 条编译消息,看起来 -std=c++11 在编译时并未实际应用

[10/11] Building CXX object CMakeFiles/mylibrary.dir/src/main/cpp/src/yuv420sp.cpp.o
FAILED: /home/user/Downloads/android-ndk-r14b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang  --target=i686-none-linux-android --gcc-toolchain=/home/user/Downloads/android-ndk-r14b/toolchains/x86-4.9/prebuilt/linux-x86_64 --sysroot=/home/user/Downloads/android-ndk-r14b/platforms/android-24/arch-x86 -Dmylibrary_EXPORTS -I../../../../src/main/cpp/include -I/home/user/git/project/OpenCV-android-sdk3.3.0/sdk/native/jni/include -I../../../../src/main/cpp/build/include -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -mstackrealign -Wa,--noexecstack -Wformat -Werror=format-security -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -mstackrealign -Wa,--noexecstack -Wformat -Werror=format-security   -O0 -fno-limit-debug-info -O0 -fno-limit-debug-info  -fPIC -MD -MT CMakeFiles/mylibrary.dir/src/main/cpp/src/object_wrap.c.o -MF CMakeFiles/mylibrary.dir/src/main/cpp/src/object_wrap.c.o.d -o CMakeFiles/mylibrary.dir/src/main/cpp/object_wrap.c.o   -c /home/user/git/project/app/src/main/cpp/object_wrap.c
In file included from /home/user/git/project/app/src/main/cpp/src/object_wrap.c:209:
/home/user/git/project/app/src/main/cpp/src/object.h:17:10: fatal error: 'iostream' file not found
#include <iostream>
         ^

也试过在app gradle中设置flag,还是不行

externalNativeBuild {
  cmake {
    cppFlags "-std=c++11", "-Wno-error=format-security"
    arguments "-DANDROID_STL=gnustl_static", "-DANDROID_ARM_NEON=TRUE"
  }
}

如果我设置-DANDROID_STL=stlport_static,会多出两个错误

错误:(25, 10) 致命错误:找不到“线程”文件

错误:(424, 14) 致命错误: 'array' file not found

【问题讨论】:

    标签: cmake android-ndk android-studio-3.0


    【解决方案1】:

    在gradle中改成gcc工具链后,问题解决了。

    arguments "-DANDROID_TOOLCHAIN=gcc","-DANDROID_ARM_NEON=TRUE" ,"-DANDROID_STL_FORCE_FEATURES=OFF"
    cppFlags "-std=gnu++11", "-Wno-error=format-security"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-14
      相关资源
      最近更新 更多