gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:07:43 24 4
gpt4 key购买 nike

现在 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.solibc++_shared.so),从而 bundle 到应用程序中。似乎 CMake 工具链根本没有 bundle libc++_shared.so(实际上,它没有在 APK 中找到)。

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

.

.

我的设置:

在 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)

最佳答案

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

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

它将'libc++_shared.so'打包到apk文件中

关于Android Studio CMake - 共享库缺少 libc++_shared.so? CMake 可以 bundle 这个吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39620739/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com