首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在Android中使用CMake链接库:无法加载本机库

无法在Android中使用CMake链接库:无法加载本机库
EN

Stack Overflow用户
提问于 2017-04-19 16:33:15
回答 1查看 1K关注 0票数 0

一旦我想通过target_link_libraries(...)添加自己的库,我的应用程序就会崩溃,出现以下错误:

代码语言:javascript
复制
E/AndroidRuntime: FATAL EXCEPTION: main
Process: my.process, PID: 3651
java.lang.RuntimeException: Unable to start activity ComponentInfo{my.process/android.app.NativeActivity}: java.lang.IllegalArgumentException: Unable to load native library: /data/app/my.process/lib/x86/libnative-activity.so

我在src/cpp/main/CMakeLists.txt中的src/cpp/main/CMakeLists.txt文件如下所示:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.4.1)

# build native_app_glue as a static lib
add_library(app-glue STATIC
            ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c)

# now build app's shared lib
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")

# Native-Activity
add_library(native-activity SHARED "")

# Native-Library
add_library(native-lib SHARED "")

include("Native/CMakeLists.txt")

# Link the native-activity
target_sources(native-activity PRIVATE "${CMAKE_CURRENT_LIST_DIR}/main.cpp")

target_include_directories(native-activity PRIVATE
                           ${ANDROID_NDK}/sources/android/native_app_glue)

# add lib dependencies
target_link_libraries(native-activity
                      android
                      app-glue
                      log)

target_link_libraries(native-activity native-lib)

CMake文件在src/cpp/main/Native/CMakeLists.txt中如下所示:

代码语言:javascript
复制
set_target_properties(native-lib PROPERTIES LINKER_LANGUAGE CXX)

如果我从CMake编译中的第一个src/cpp/main/CMakeLists.txt文件中删除了下面一行,就会产生这样的结果:

代码语言:javascript
复制
target_link_libraries(native-activity native-lib)

我做错什么了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-20 10:15:06

对我起作用的是使用图书馆(.) CMake命令,并使用完整的路径将库本机库与本机活动链接起来。

工作的CMake文件如下所示:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.4.1)

# build native_app_glue as a static lib
add_library(app-glue STATIC
            ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c)

# now build app's shared lib
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")

# Native-Activity
add_library(native-activity SHARED "")

# Native-Library
add_library(native-lib SHARED "")

include("Native/CMakeLists.txt")

# Link the native-activity
target_sources(native-activity PRIVATE "${CMAKE_CURRENT_LIST_DIR}/main.cpp")

target_include_directories(native-activity PRIVATE
                           ${ANDROID_NDK}/sources/android/native_app_glue)

# add lib dependencies
target_link_libraries(native-activity
                      android
                      app-glue
                      log)

find_library(native-lib my-native-lib)

target_link_libraries(native-activity ${my-native-lib})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43501344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档