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

新手上路,请多包涵

现在 Android Studio 2.2 正式发布,我正在从旧的 ndk-build 过程迁移到尝试在 AS 中使用 CMake。由于我正在合并我公司内部的几个代码库(我无法编辑),这些代码库大量使用 C++11 代码(包括可怕的 std::to_string() 方法),我可以编译的唯一方法是一些精选的配置选项——所有这些都是我在开始使用 ndk-build 时发现的。 (见下文)

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

如中,我收到以下错误:

 java.lang.UnsatisfiedLinkError: dlopen failed: library "libc++_shared.so" not found

在我旧的 ndk-build 过程中,我总是在我的输出文件夹中结束 2 个库( mylibrary.so 和 _libc++shared.so ),从而将它们捆绑到应用程序中。似乎 CMake 工具链根本没有捆绑 _libc++shared.so (实际上,它没有在 APK 中找到)。

我已经为此苦苦思索了 6 个小时。我能以某种方式获得 CMake 工具链来捆绑这个丢失的库吗?有什么线索吗?

.

.

我的设置:

在 gradle.build 中:

 externalNativeBuild {
        cmake {
            arguments '-DANDROID_STL=c++_shared', '-DANDROID_TOOLCHAIN=gcc', '-DANDROID_PLATFORM=android-16'
        }
    }

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

 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)

原文由 Mete 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.1k
2 个回答

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

将此文件复制到您的 CMakeLists.txt 和内部 CMakeLists.txt

include(ndk-stl-config.cmake)

如果您有问题,请告诉我

原文由 Jomo Fisher 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

 externalNativeBuild {
        cmake {
            cppFlags ""
            arguments "-DANDROID_STL=c++_shared"
        }
    }

它会在 apk 文件中打包 ‘libc++_shared.so’

原文由 Bub 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题