【问题标题】:Statically linking a library in Android Studio 3.x and CMake在 Android Studio 3.x 和 CMake 中静态链接库
【发布时间】:2018-06-14 05:25:52
【问题描述】:

首先,这是我的错误。

Build command failed.
Error while executing process /Users/{user}/Library/Android/sdk/cmake/3.6.4111459/bin/cmake with arguments {--build /Users/{user}/Desktop/android/app/.externalNativeBuild/cmake/debug/arm64-v8a --target native-lib}
ninja: error: 'src/main/jniLibs/zlib/arm64-v8a/lib/libz.a', needed by '../../../../build/intermediates/cmake/debug/obj/arm64-v8a/libnative-lib.so', missing and no known rule to make it

我为每个 ARCH(armeabi、armeabi-v7a、arm64-v8a、x86、x86_64)都有一个静态链接的预构建 zlib.a 库,并像这样放置库。

app/src/main/jniLibs/zlib/${ANDROID_ABI}/include/zlib.h
app/src/main/jniLibs/zlib/${ANDROID_ABI}/lib/libz.a

这是我的 CMakeLists.txt

cmake_minimum_required(VERSION 3.4.1)

add_library(native-lib SHARED src/main/cpp/native-lib.cpp)

add_library(libz STATIC IMPORTED)

set_target_properties(libz PROPERTIES IMPORTED_LOCATION src/main/jniLibs/zlib/${ANDROID_ABI}/lib/libz.a)

include_directories(src/main/jniLibs/zlib/${ANDROID_ABI}/include)

find_library(log-lib log)

target_link_libraries(native-lib libz ${log-lib})

在 Java 文件中,

static {
    System.loadLibrary("libz");
    System.loadLibrary("native-lib");
}

我不知道这个问题。好像没问题。我不碰 build.gradle,应该吗?我错过了什么?有什么问题?

【问题讨论】:

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


    【解决方案1】:

    属性IMPORTED_LOCATION应该是绝对路径

    使用${CMAKE_CURRENT_SOURCE_DIR} 表示当前处理的目录CMakeLists.txt

    set_target_properties(libz PROPERTIES
      IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/src/main/jniLibs/zlib/${ANDROID_ABI}/lib/libz.a)
    

    【讨论】:

      猜你喜欢
      • 2017-06-13
      • 2017-03-14
      • 1970-01-01
      • 1970-01-01
      • 2016-04-14
      • 2013-06-04
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多