我有一些C代码必须集成到我的Android项目中。它取决于一个库(.so),我也有.h文件。
我将这些库复制并包含目录到项目的cpp程序包中,以使它们更易于查找。
为了简化起见,我尝试从Android Studio提供的HelloJNI项目开始,并按照说明here进行操作。
这是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
答案 0 :(得分:1)
您似乎将导入的库链接到hello-jni
目标两次。另外,也不需要在${}
库的target_link_libraries()
命令中使用libgdndk
。您已经为该库定义了CMake目标libgdndk
,因此您可以执行以下操作:
target_link_libraries( hello-jni libgdndk app-glue )
答案 1 :(得分:0)
我终于从lib的发行商那里得到了一些帮助,(有效的)结果看上去与我尝试过的代码非常相似,所以也许只是库的位置有问题。
add_library( gdndk SHARED IMPORTED )
include_directories( $ENV{userprofile}/AppData/Local/Android/sdk/extras/blackberry/dynamics_sdk/sdk/libs/handheld/gd/inc)
set_target_properties(gdndk PROPERTIES IMPORTED_LOCATION $ENV{userprofile}/AppData/Local/Android/sdk/extras/blackberry/dynamics_sdk/sdk/libs/handheld/gd/libs/${ANDROID_ABI}/libgdndk.so )
target_link_libraries( hello-jni gdndk )