android - 在 Android Studio 3.x 和 CMake 中静态链接库
问题描述
首先,这是我的错误。
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,应该吗?我错过了什么?什么是问题?
解决方案
Property IMPORTED_LOCATION should be an absolute path.
Use ${CMAKE_CURRENT_SOURCE_DIR}
for refer to the directory with currently processed CMakeLists.txt
:
set_target_properties(libz PROPERTIES
IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/src/main/jniLibs/zlib/${ANDROID_ABI}/lib/libz.a)
推荐阅读
- java - 我在输出 JsonFile 中的键以相反的顺序显示
- android - 在Android中设置View的高度
- python-3.x - 如何摆脱在 Python Selenium 中使用 ChromeDriver 启动 Google Chrome 的响应消息
- amazon-web-services - aws cli - 如何仅查询 ec2 on demand 实例
- c++ - C++处理超级基本错误我应该怎么做?
- reactjs - 当tiltReverse 设置为{false} 时,react-parallax-tilt 包会干扰对子项的悬停效果
- reactjs - 如何将 MUI 手风琴的标题颜色更改为灰色?
- assembly - 设置 VMIN 和 VTIME Termios 程序集
- django - 提交表单后重定向到创建的对象
- autodesk-forge - 当用户运行 Forge 应用程序时收到通知