现在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
Run Code Online (Sandbox Code Playgroud)
在我原来的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'
}
}
Run Code Online (Sandbox Code Playgroud)
我的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)
Run Code Online (Sandbox Code Playgroud)