android - 将标头和本机库添加到 Android 项目
问题描述
我有一些 C 代码必须集成到我的 Android 项目中。它取决于一个库(.so),我也有 .h 文件。
我将 libs 和 include 目录复制到项目的 cpp 包中,以使它们更容易找到。
为了更容易,我尝试从 Android Studio 提供的 HelloJNI 项目开始,并按照此处的说明进行操作。
这是 CMakeLists.txt:
#given from HelloJNI
cmake_minimum_required(VERSION 3.4.1)
add_library(hello-jni SHARED
hello-jni.c)
# Include libraries needed for hello-jni lib
target_link_libraries(hello-jni
android
log)
#my own additions now:
add_library( # Specifies the name of the library.
libgdndk
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
IMPORTED)
set_target_properties( # Specifies the target library.
libgdndk
# Specifies the parameter you want to define.
PROPERTIES IMPORTED_LOCATION
# Provides the path to the library you want to import.
${CMAKE_BINARY_DIR}/libs/${ANDROID_ABI}/libgdndk.so )
include_directories(${CMAKE_BINARY_DIR}/inc/)
target_link_libraries( hello-jni libgdndk app-glue ${libgdndk} )
这会导致错误:
ninja: error: 'libs/armeabi-v7a/libgdndk.so', needed by 'C:/workspace/android/HelloJNI/app/build/intermediates/cmake/arm7/debug/obj/armeabi-v7a/libhello-jni.so', missing and no known rule to make it
解决方案
您似乎将导入的库链接到hello-jni
目标两次。此外,不需要在库${}
的target_link_libraries()
命令中使用。libgdndk
您已经libgdndk
为该库定义了一个 CMake 目标,因此您可以这样做:
target_link_libraries( hello-jni libgdndk app-glue )
推荐阅读
- c++ - 使用 QT 和 c++ 在 txt 文件中搜索的代码
- c# - OpenXML - 表创建,我如何创建表而不需要 excel 来修复它们
- jquery - 标签值不会在 jquery click 上立即更改
- json - 使用 Dropwizard 时配置 Jackson 映射器
- python - 根据其他列中的值填充 pandas 列
- php - 本地主机重定向您太多次。如何防止用户从管理员访问页面
- mysql - 如何在1 Mysql中求和,乘和除
- python-3.x - 如何从文件夹中读取 csv 文件,读取前 10 个文件并保存在一个 csv 中,读取接下来的 10 个文件并保存在另一个 csv 文件中等等
- react-native - Apollo Graphql 分页因限制而失败
- swagger - Swagger 生成的 Java 客户端没有重载调用,即使查询参数被标记为可选