【问题标题】:Link STL library with Gradle CMake project将 STL 库与 Gradle CMake 项目链接
【发布时间】:2017-09-07 22:34:40
【问题描述】:

我有一个简单的 Gradle 项目并尝试添加使用 CMake 构建它的本机库

根 CMakeLists.txt

project(mine_lib)
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)

set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
set(EXECUTABLE_OUTPUT_PATH "${PROJECT_SOURCE_DIR}/bin")

configure_file("${PROJECT_SOURCE_DIR}/src/buildinfo/buildinfo.hpp.in" "${PROJECT_BINARY_DIR}/buildinfo.hpp")

set(CMAKE_VERBOSE_MAKEFILE on)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${warnings}")
set(CMAKE_C_FLAGS   "${CMAKE_C_FLAGS} ${warnings}")

add_subdirectory(${PROJECT_SOURCE_DIR}/src)

include_directories(${PROJECT_SOURCE_DIR}/src/data)
include_directories("${PROJECT_BINARY_DIR}")

add_library(mine_lib SHARED "${PROJECT_SOURCE_DIR}/src/jni/jniwrapper.c")

build.gradle

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.3"
    defaultConfig {
        applicationId "..."
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"

        defaultConfig {
            externalNativeBuild {
                cmake {
                    arguments "-DANDROID_STL=system"
                    cppFlags "-fexceptions"
                }
            }
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    externalNativeBuild {
        cmake {
            path "src/main/mine_lib/CMakeLists.txt"
        }
    }

    sourceSets {
        main {
            jniLibs.srcDirs 'src/main/mine_lib/src/'
        }
    }
}

在我的本地库中,我使用了 STL 库的一部分,例如 cstdint。现在我收到如下所示的编译错误:

Error:FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:externalNativeBuildDebug'.
> Build command failed.
  Error while executing process /AndroidSDK/android-sdk-macosx/cmake/3.6.4111459/bin/cmake with arguments {--build /Users/user/IdeaProjects/Sandbox/MyApp/app/.externalNativeBuild/cmake/debug/mips64 --target mine_lib}
  [1/2] Building C object CMakeFiles/mine_lib.dir/src/jni/jniwrapper.c.o
  FAILED: /AndroidSDK/android-sdk-macosx/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang  --target=mips64el-none-linux-android --gcc-toolchain=/AndroidSDK/android-sdk-macosx/ndk-bundle/toolchains/mips64el-linux-android-4.9/prebuilt/darwin-x86_64 --sysroot=/AndroidSDK/android-sdk-macosx/ndk-bundle/sysroot -Dheif_EXPORTS -I/Users/user/IdeaProjects/Sandbox/HEIFGallery/app/src/main/mine_lib/src/reader -I. -isystem /AndroidSDK/android-sdk-macosx/ndk-bundle/sysroot/usr/include/mips64el-linux-android -D__ANDROID_API__=21 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -fintegrated-as -Wa,--noexecstack -Wformat -Werror=format-security   -O0 -fno-limit-debug-info  -fPIC -MD -MT CMakeFiles/mine_lib.dir/src/jni/jniwrapper.c.o -MF CMakeFiles/mine_lib.dir/src/jni/jniwrapper.c.o.d -o CMakeFiles/mine_lib.dir/src/jni/jniwrapper.c.o   -c /Users/user/IdeaProjects/Sandbox/MyApp/app/src/main/mine_lib/src/jni/jniwrapper.c
  In file included from /Users/user/IdeaProjects/Sandbox/MyApp/app/src/main/mine_lib/src/jni/jniwrapper.c:2:
  /Users/user/IdeaProjects/Sandbox/MyApp/app/src/main/mine_lib/src/data/dataparser.hpp:16:10: fatal error: 'cstdint' file not found
  #include <cstdint>
           ^~~~~~~~~
  1 error generated.
  ninja: build stopped: subcommand failed.


* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED in 0s

真正的问题是什么,我该如何解决?

【问题讨论】:

    标签: android stl cmake android-ndk android-gradle-plugin


    【解决方案1】:

    根据我的理解,这个问题可以通过使用不同的 C++ 库来解决。

    目前您在build.gradle 文件中指定以下内容:

    arguments "-DANDROID_STL=system"
    

    如以下documentation 所述,是:

    system:最小的系统 C++ 运行时库和默认运行时

    您可能需要将其更改为另一个 C++ 库,但我不确定它会是哪一个,可能是 gnu 选项之一。更好的是,它可以通过完全删除该语句来解决。

    【讨论】:

    • @rawnald-gregory-erickson 你能解决这个问题吗?
    猜你喜欢
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多