首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android -共享库缺少libc++_shared.so?CMake可以捆绑这个吗?

Android -共享库缺少libc++_shared.so?CMake可以捆绑这个吗?
EN

Stack Overflow用户
提问于 2016-09-21 15:27:45
回答 5查看 28.7K关注 0票数 19

现在AndroidStudio2.2已经正式发布,我将从我以前的ndk构建过程迁移到在AS中尝试和使用CMake。由于我在公司内集成了大量使用C++11代码(包括可怕的std::to_string()方法)的几个代码库(这些代码库我无法编辑),所以我可以编译的唯一方法是选择几个配置选项--所有这些都是我在开始使用ndk时发现的--构建。(见下文)

所以,一切都会再次编译并构建到APK中--我100%地验证我的输出共享库是否存在于APK中,但我无法成功地使用System.loadLibrary('mylibrary') --这是因为缺少依赖项libc++_shared.so。

与之一样,我得到了以下错误:

代码语言:javascript
运行
复制
java.lang.UnsatisfiedLinkError: dlopen failed: library "libc++_shared.so" not found

在我以前的ndk构建过程中,我总是在输出文件夹中使用两个库(mylibrary.so和libc++_shared.so),从而将它们捆绑到应用程序中。CMake工具链似乎根本没有捆绑libc++_shared.so (实际上,它在APK中没有找到)。

我把头撞在上面已经有6个小时了。我能以某种方式让CMake工具链捆绑这个丢失的库吗?有什么线索吗?

我的设置:

在gradle.build中:

代码语言:javascript
运行
复制
externalNativeBuild {
        cmake {
            arguments '-DANDROID_STL=c++_shared', '-DANDROID_TOOLCHAIN=gcc', '-DANDROID_PLATFORM=android-16'
        }
    }

我的CMakeLists.txt (文件名为了简洁起见):

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

set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -std=gnu++11")

include_directories(.)
include_directories(./other)

set(my_SRCS jniInterface.cpp
    etc.cpp)


add_library(mylibrary SHARED ${my_SRCS})

target_link_libraries(mylibrary atomic log)
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-09-22 00:17:12

我编写了一个应该打包STL文件的CMake配置:https://github.com/jomof/ndk-stl/blob/master/ndk-stl-config.cmake

将此文件复制到您的CMakeLists.txt旁边,并在CMakeLists.txt中执行

include(ndk-stl-config.cmake)

如果你有问题请告诉我

票数 11
EN

Stack Overflow用户

发布于 2019-07-23 08:52:50

我只是将这个脚本添加到moudle的build.gradle中:

代码语言:javascript
运行
复制
externalNativeBuild {
        cmake {
            cppFlags ""
            arguments "-DANDROID_STL=c++_shared"
        }
    }

它将在apk文件中打包“libc++_shared.so”

票数 17
EN

Stack Overflow用户

发布于 2019-07-04 08:24:04

将此添加到您的build.gradle (Module: app)

代码语言:javascript
运行
复制
externalNativeBuild {
            cmake {
                cppFlags "-std=c++14 -fexceptions -frtti"
                arguments "-DANDROID_ARM_NEON=TRUE",'-DANDROID_STL=c++_shared'
            }
        }
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39620739

复制
相关文章

相似问题

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