【发布时间】:2017-01-29 22:49:37
【问题描述】:
现在 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)
【问题讨论】:
-
这是 Android Studio CMake 集成中的一个已知问题:code.google.com/p/android/issues/detail?id=214664
-
你可以试试这个:github.com/googlesamples/android-ndk/pull/298 是否适合你。可能还有更多工作要做,尝试一下,看看它是否可以暂时帮助您
-
感谢@Gerry 确实有效。我可能会将我所做的更改制定为该线程的替代答案.. :-)
标签: android c++11 android-ndk cmake std